0

尝试从数组中选择值时出现错误,例如以下代码

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": 标识符无效

请建议。谢谢,艾伦

4

2 回答 2

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.
于 2013-04-26T12:24:30.670 回答
0

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

于 2013-04-26T12:22:00.790 回答