我的查询返回如下内容:
我想将每个值保存到数组中。我知道如何使用SELECT INTO保存一行的每一列,但我不知道如何只包含一列来保存表的行。
我想得到这个:
my_array(1) = 11111
my_array(2) = 22222
my_array(3) = 33333
....
数组的长度为6。我知道查询不会返回超过6行。 如果查询返回的行数少于6行,是否可以将NULL放入没有行的数组元素中?
答案 0 :(得分:2)
如评论中所建议,您可以使用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