Эти повышение присваивается, библиотека , кажется, точно, что Вы ищете. Это делает константы присвоения к контейнерам легче чем когда-либо.
Самый простой способ:
arr_foos.Delete();
Другой способ - объявить переменную внутри цикла FOR
. Таким образом, он будет воссоздаваться для каждого прохода.
Примерно так:
DECLARE
TYPE foo_record IS RECORD (foo%type, bar%type);
TYPE foo_records IS TABLE OF foo_record INDEX BY PLS_INTEGER;
CURSOR monkeys is SELECT primates FROM zoo;
row_monkey monkeys%rowtype;
BEGIN
FOR row_monkey IN monkeys loop
DECLARE
arr_foos foo_records;
BEGIN
null;
END;
END LOOP;
END;
Вы собираетесь считывать данные из таблицы зоопарка в коллекцию? Тогда есть лучший способ:
DECLARE
type foos_ts is table of zoo.foo%type index by pls_integer;
foos foos_t;
BEGIN
select foo
bulk collect into foos
from zoo;
...
END;
Bulk collect автоматически очищает коллекцию перед выборкой, и это работает быстрее, чем чтение построчно в цикле. К сожалению, он не работает с записями, поэтому вам понадобится несколько таблиц PL / SQL для каждого поля.
Вы можете найти дополнительную информацию здесь: Получение результатов запроса в коллекции с помощью предложения BULK COLLECT
]