如何一次将所有数组值传递给select语句

时间:2015-01-22 11:32:05

标签: oracle plsql oracle11g oracle10g plsqldeveloper

您好我正在使用带有字符串参数

的存储过程
 '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**);

2 个答案:

答案 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));