1

以下に示すPL/SQLスクリプトは、20行目で実行に失敗しています。

    declare 

      type string_table is table of varchar(100);
      v_names string_table := string_table();

    begin

      v_names.EXTEND(3);

      v_names(1) := 'name1';
      v_names(2) := 'name2';
      v_names(3) := 'name3';

      dbms_output.put_line(v_names(1));
      dbms_output.put_line(v_names(2));
      dbms_output.put_line(v_names(3));
      dbms_output.put_line(v_names.COUNT());

20    select * from table(v_names);

    end;

報告されるエラーメッセージは次のとおりです。

ORA-06550:行20、列23:
PLS-00642:ローカルコレクションタイプはSQLステートメントでは許可されていません

ORA-06550:行20、列17:
PL / SQL:ORA-22905:ネストされていない表項目の行にアクセスできません

ORA-06550:行20、列3:
PL / SQL:SQL文は無視されます。

この問題を解決する方法についてのアイデア。

この質問をSOに投稿する目的でのみ、このコードを記述したことに注意してください。同様のコードは、より大きなパッケージの一部です...

前もって感謝します!

4

1 に答える 1

3

CREATE TYPEを使用して、データベースで定義されているタイプに対してのみSQL(SELECTなど)を使用できます。

create type string_table is table of varchar(100);
/

それで:

declare 

      v_names string_table := string_table();

    begin

      v_names.EXTEND(3);

      v_names(1) := 'name1';
      v_names(2) := 'name2';
      v_names(3) := 'name3';

      dbms_output.put_line(v_names(1));
      dbms_output.put_line(v_names(2));
      dbms_output.put_line(v_names(3));
      dbms_output.put_line(v_names.COUNT());

      select * from table(v_names);

    end;
于 2011-07-04T16:45:20.333 に答える