从数组查询

时间:2013-04-26 12:12:49

标签: arrays oracle plsql

尝试从数组中选择值时出错,如下面的代码

declare result CLOB;
  myarray selected_pkg.num_array := selected_pkg.num_array();
begin
  myarray.extend(3);
  myarray(1) := 1; myarray(2) := 5; myarray(3) := 9;
  EXECUTE IMMEDIATE 'select column_value from table (cast(myarray AS selected_pkg.num_array))';
  COMMIT;
end;
  

ORA-00904:“MYARRAY”:标识符无效

请建议。  谢谢,艾伦

2 个答案:

答案 0 :(得分:2)

  • 首先,在这里似乎没有任何理由使用动态SQL。
  • 其次,如果要运行SELECT语句,则需要对结果执行某些操作。您需要一个游标FOR循环,或者您需要BULK COLLECT将结果放入不同的集合中,或者对结果执行某些操作。
  • 第三,如果要在SQL中使用集合,则必须在SQL中定义该集合,而不是在PL / SQL中定义。

这样的事情会起作用(我不确定你是否想要对结果做什么)

SQL> create type num_arr is table of number;
  2  /

Type created.

SQL> declare
  2    l_nums num_arr := num_arr( 1, 2, 3, 7 );
  3  begin
  4    for i in (select column_value from table( l_nums ))
  5    loop
  6      dbms_output.put_line( i.column_value );
  7    end loop;
  8  end;
  9  /
1
2
3
7

PL/SQL procedure successfully completed.

答案 1 :(得分:0)

此时不需要执行立即执行。 在proc。中使用fetch或循环游标