Как предлагается в комментарии, вы можете использовать BULK COLLECT
select your_col BULK COLLECT
INTO your_collection from my_array where some_condition = 'something';
Относительно вашего вопроса
, если запрос возвращает менее 6 строк, можно ли поместить NULL в массивэлемент, в котором для него нет строк
Вы не сказали, почему это требуется, но BULK COLLECT
создаст столько элементов в массиве, сколько строк представлено в результате запроса.Если вам нужны элементы NULL
, вы можете использовать методы сбора count
и extend
для проверки и выделения пустых элементов до тех пор, пока счетчик не станет равным 6.
DECLARE
TYPE myarrtype is table of integer;
my_array myarrtype;
BEGIN
select level bulk collect into my_array from dual
connect by level <= 4; --generates 4 integers 1-4 and loads into array.
dbms_output.put_line('OLD COUNT '||my_array.count);
if my_array.count <= 6 then
my_array.extend(6 - my_array.count); --This appends required number of
--NULL elements
dbms_output.put_line('NEW COUNT '||my_array.count);
end if;
END;
/
Вывод
1 rows affected
dbms_output:
OLD COUNT 4
NEW COUNT 6
Демо