如何仅将表的一列值保存到数组中?

时间:2019-02-20 09:19:53

标签: oracle plsql

我的查询返回如下内容:

enter image description here

我想将每个值保存到数组中。我知道如何使用SELECT INTO保存一行的每一列,但我不知道如何只包含一列来保存表的行。

我想得到这个:

my_array(1) = 11111
my_array(2) = 22222
my_array(3) = 33333
....

数组的长度为6。我知道查询不会返回超过6行。 如果查询返回的行数少于6行,是否可以将NULL放入没有行的数组元素中?

1 个答案:

答案 0 :(得分:2)

如评论中所建议,您可以使用BULK COLLECT

select your_col BULK COLLECT 
 INTO your_collection from my_array where some_condition = 'something';

关于您的问题

  

如果查询返回的行数少于6行,则可以将NULL放入   没有行的数组元素

您尚未说明为什么需要这样做,但是BULK COLLECT将在数组中创建与查询结果中存在的行数一样多的元素。如果需要NULL元素,则可以使用countextend收集方法来检查和分配空元素,直到计数为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

Demo