Вложенные таблицы в хранимой процедуре - PullRequest
1 голос
/ 04 июля 2011

Сценарий 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: line 20, column 23:
PLS-00642: local collection types are not allowed in SQL statements

ORA-06550: line 20, column 17:
PL/SQL: ORA-22905: cannot access rows from a non-nested table item

ORA-06550: line 20, column 3:
PL/SQL: SQL Statement ignored.

Любые идеи, как решить эту проблему.

Обратите внимание, что я написал этот код только для того, чтобы опубликовать этот вопрос в SO. Подобный код является частью большей упаковки ...

Заранее спасибо!

Zen

1 Ответ

3 голосов
/ 04 июля 2011

Вы можете использовать SQL (например, SELECT) только для типов, определенных в базе данных, используя CREATE TYPE:

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;
...