如何将表的一列值保存到数组中?
Posted
技术标签:
【中文标题】如何将表的一列值保存到数组中?【英文标题】:How to save just one column values of a table into an array? 【发布时间】:2019-02-20 09:19:53 【问题描述】:我的查询返回如下内容:
我想将每个值保存到数组中。我知道如何使用 SELECT INTO 保存行的每一列,但我不知道如何保存只有一列的表的行。
我想得到这个:
my_array(1) = 11111
my_array(2) = 22222
my_array(3) = 33333
....
数组的长度是 6。我知道我的查询不会返回超过 6 行。 如果查询返回少于 6 行,是否可以将 NULL 放入没有行的数组元素中?
【问题讨论】:
bulk collect into
【参考方案1】:
根据评论中的建议,您可以使用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
Demo
【讨论】:
谢谢!似乎是一个完美的解决方案。所以这只适用于整数表,而不是 varray(6),对吧?我有另一个 6 个元素的 varray,我需要使用 for 循环找出在第一个和第二个数组中是否存在至少一个相同的值。所以我在另一个循环中创建了循环:FOR i IN 1..6 LOOP FOR ii IN 1..6 LOOP IF trisks(i) = orisks(ii) THEN dbms_output.put_line('совпадает по риску ' || trisks(i)); END IF; END LOOP; END LOOP;
如果我做错了什么请告诉我。
@РусланХ :这回答了您最初的问题。如果您认为它有效,请接受它。如果还有其他问题,请考虑询问新的问题并提供所需的详细信息。
我已经尝试过您的解决方案。将两个数组都更改为表,它的工作方式应该是这样。再次感谢您!以上是关于如何将表的一列值保存到数组中?的主要内容,如果未能解决你的问题,请参考以下文章