oracle如何查看集合的值,oracle值存在于集合中

我有一个函数(在视图中使用),最终结果是逗号分隔值表格中行的唯一值列表。oracle值存在于集合中

本质上给出的表:

studentid classes

12345 MATH 1301, HIST 1301, POLS 1301

57495 MATH 2309, HIST 1301

39485 MATH 1301, HIST 1301

我想看看

MATH 1301

MATH 2309

HIST 1301

POLS 1301

下面的代码工作完美的,如果源表虽小,但看30000行的表时,我得到以下错误。 ORA-06532: Subscript outside of limit

我很确定我的问题是集合越来越大,因为它得到重复的值。当集合变得太大时,重复值本身只会成为一个问题。如何将重复值保存在集合中?

我试过childnames.exists(element)但我相信这只适用于查看索引值element是否存在正确的元素?我看过member of,但我不明白如何实现它..是否有一个简单的方法来检查一个集合元素是否存在?或者我看起来很简单?除odcivarchar2list之外是否有其他类型可以允许更大的收藏?

CREATE OR REPLACE FUNCTION unique_values_from_csv (p_del VARCHAR2 := ',')

RETURN SYS.odcivarchar2list

IS

childnames SYS.odcivarchar2list := sys.odcivarchar2list();

tempvar VARCHAR2(255);

l_idx PLS_INTEGER;

l_list2 VARCHAR2(32767) ;

l_value VARCHAR2(32767);

CURSOR tablewalker_cur

IS

SELECT distinct classes

FROM studentclasses;

BEGIN

FOR recordwalker_rec IN tablewalker_cur

LOOP

l_list2 := recordwalker_rec.classes;

LOOP

l_idx := INSTR (l_list2, p_del);

IF l_idx > 0

THEN

childnames.EXTEND;

tempvar := (LTRIM (RTRIM (SUBSTR (l_list2, 1, l_idx - 1))));

childnames (childnames.COUNT) := tempvar;

l_list2 := SUBSTR (l_list2, l_idx + LENGTH (p_del));

end if;

childnames.EXTEND;

childnames (childnames.COUNT) := (LTRIM (RTRIM (l_list2)));

EXIT;

END LOOP;

END LOOP;

RETURN childnames;

END unique_values_from_csv;

/

2013-03-06

dangel

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值