Вложенные таблицы в хранимой процедуре
Сценарий 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;