您好我正在使用带有字符串参数
的存储过程 '919860,919736,989087'
我正在使用apex_util.string_to_table
将字符串转换为数组array := apex_util.string_to_table('919860,919736,989087', ',');
现在我想传递所有数组值select语句。
insert into table2 select * from table1 where mobile in (**all array values**);
答案 0 :(得分:1)
您不能在select语句中使用“array”变量,因为SQL语句中不允许使用本地集合类型。
我个人更喜欢的一个选项是使用INSTR函数来检查值是否在列表中:
insert into table2 select * from table1
where INSTR( ',' || '919860,919736,989087' || ','
, ',' || mobile || ',') > 0;
其他选项你可以编写一个流水线函数,它将APEX_APPLICATION_GLOBAL.VC_ARR2作为IN参数,它可以返回一个能够被TABLE函数引用的集合类型,例如:
function array_rows(p_rows_in in APEX_APPLICATION_GLOBAL.VC_ARR2) return rows_t pipelined is
begin
for i in p_rows_in.first..p_rows_in.last loop
pipe row(p_rows_in(i));
end loop;
return;
end array_rows;
insert into table2 select * from table1 where mobile in (select column_value
from table(pkg_pipe_func.piped_rows(apex_util.string_to_table('919860,919736,989087', ','))));
答案 1 :(得分:0)
以下应该做。未经测试(显然)。
insert into table2
select * from table1
where mobile in (select column_value from table(array));