«Я хочу, чтобы заполнить его во время PL / SQL
сам код с инструкциями INSERT "
Это похоже на заполнение любой другой переменной PL / SQL: мы должны использовать INTO. Только потому, что мы заполняем несколько строк, нам нужно использовать синтаксис BULK COLLECT.
declare
l_array your_nested_table_type;
begin
select col1
bulk collect into l_array
from t72;
end;
/
Если результирующий набор возвращает много записей, рекомендуется использовать предложение LIMIT внутри цикла. Это потому, что коллекции PL / SQL - как и любая другая переменная PL / SQL - хранятся в памяти сеанса. Поэтому мы не хотим, чтобы массив становился слишком большим, иначе он может взорвать PGA. Узнайте больше .
редактировать
"Я отредактировал вопрос, чтобы уточнить
именно то, что я хочу "
вздох Токенизация строки - это совсем другая проблема. Ранее я публиковал решения в двух темах. Если вы используете 9i или более раннюю версию, используйте , этот подход . В противном случае используйте это решение регулярного выражения (на самом деле это разбивает строку на числовые токены, но преобразование в символы достаточно просто).
редактировать 2
«Я только хочу иметь возможность использовать
тип "внутренне" (в пределах сохраненного
Процедура), добавив значения к нему. Является
это то, что я могу сделать с первым
ссылка? "
Конечно. Почему нет?
SQL> declare
2 local_array tok_tbl;
3 begin
4 local_array := parser.my_parse('Keith Pellig,Peter Wakeman,Ted Bentley,Eleanor Stevens');
5 local_array.extend();
6 local_array(5) := 'Reese Verrick';
7 for i in local_array.first()..local_array.last()
8 loop
9 dbms_output.put_line(local_array(i));
10 end loop;
11 end;
12 /
Keith Pellig
Peter Wakeman
Ted Bentley
Eleanor Stevens
Reese Verrick
PL/SQL procedure successfully completed.
SQL>
Здесь я повторно использовал свой тип SQL, но он бы работал так же хорошо, если бы вместо этого в пакете PL / SQL было объявлено TOK_TBL
.