oracle一个字段显示一个集合,oracle 某个字段的结果是一个集合,怎么知道这个结果中是否有某个值...

匿名用户

1级

2018-05-30 回答

PL/SQL中是没有数组的概念,他的集合数据类型和数组是相似的,所以可以用ARRAY来解决问题。

第一步:创建你所需的ARRAY类型

Create Type varray_answer as varray(10) of varchar2(50);

第二步:把你的sf_split_string

函数返回的类型设置为varray_answer

第三步:

select era_id, us_id, sf_split_string(answer, ':') as listanswer, tu.name

from evt_result_answer, tuser tu

where e_id = 37200

and ques_id = 94603

and tu.id = evt_result_answer.us_id

/**判断是否含有某个值*/

and listanswer.EXISTS('2');

集合方法

pl/sql预定义了在varray 和嵌套表实例上进行调用的方法。这些方法能在集合上执行一定的功能。

EXISTS

该函数返回集合中第一个元素的索引,如果集合为空,返回NULL

Collection.EXISTS(index)

COUNT

该函数集合元素的数目

Collection.COUNT

DELETE

该过程从嵌套表中删除一个或多个或合部元素

Table_name.DELETE 删除所有元素

Table_name.delete(index)删除指定索引的记录

Table_name.delete(start_index,end_index)删除区间内元素

等方法

追问:

CREATE OR REPLACE TYPE Varchar2Varray IS VARRAY(100) of VARCHAR2(40);

写函数前已经写这个了

但是执行你说的sql报错

08be7d2fbf877e3bd4d7feaffc6aaaba.png

追答:

返回的是Varchar2Varray这个类型么

追问:

对啊!就是这个类型

CREATE OR REPLACE TYPE Varchar2Varray IS VARRAY(100) of VARCHAR2(40);然后按照你说的不行,最好加下我q865003051 说下

追答:

在sql中不能执行集合的函数,必须在declare块或者存储过程块中才能执行。

不过你如果想判断这个字段是否含有2的话 根本不需要这么麻烦

select era_id, us_id, sf_split_string(answer, ':') as listanswer, tu.name

from evt_result_answer, tuser tu

where e_id = 37200

and ques_id = 94603

/***/

and tu.id = evt_result_answer.us_id

AND INSTR(ANSWER,'2') >0这句sql就可以

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值