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 を使用する理由はないようです。
  • 第 2 に、ステートメントを実行する場合SELECTは、結果に対して何かを行う必要があります。カーソルFORループが必要になるかBULK COLLECT、結果を別のコレクションに入れるか、結果に対して何かをする必要があります。
  • 第 3 に、SQL でコレクションを使用する場合、そのコレクションは PL/SQL ではなく 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 でフェッチまたはループ カーソルを使用します。

于 2013-04-26T12:22:00.790 に答える