Вложенные таблицы в хранимой процедуре

Сценарий 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. Подобный код является частью большего пакета...

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

Zen

1 ответ

Решение

Вы можете использовать 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;
Другие вопросы по тегам