oracle 使用varchar 2数组的查询字符串的PL/SQL打开游标

lmyy7pcs  于 2023-03-07  发布在  Oracle
关注(0)|答案(1)|浏览(162)

我想在open c1 for sql-statement中使用数组(在plsql中)
数组是varchar2;的表。
数组由另一个函数填充:

OPEN v_c1 FOR query_statement;
            LOOP
                v_hrc_list.extend; 
                FETCH v_c1 into v_hrc_list(v_hrc_list.count);
                EXIT WHEN (v_c1%NOTFOUND);
            END LOOP;
        CLOSE v_c1;

我试过:

query_statement = `...||'WHERE MEMBER OF (select * from table (:table_hrcs))'`

OPEN v_c1 FOR query_statement USING table_hrcs;

我得到了以下错误:
数据类型不一致:预期的UDT已获得CHAR
我也试过

...||'WHERE MEMBER OF (select * from table ('||table_hrcs||'))'
t98cgbkg

t98cgbkg1#

你混淆了两种指代集合成员的方式。
对于您显示的集合类型,您可以执行以下操作:

' ... WHERE your_column IN (select * from table (:table_hrcs))'

或者更简单地说:

' ... WHERE dummy MEMBER OF :table_hrcs'

fiddle
在处理大量数据时,您可能会发现两者之间的性能差异。
还要注意,结果数组的最后一个元素为空。
你的例子不需要使用游标和for循环,你可以直接批量收集到目标集合中(这样就不需要初始化,也没有空元素):

EXECUTE IMMEDIATE query_statement
BULK COLLECT INTO v_hrc_list
USING table_hrcs;

fiddle

相关问题