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

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元素,你可以使用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

【讨论】:

谢谢!似乎是一个完美的解决方案。所以这只适用于整数表,而不是 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; 如果我做错了什么请告诉我。 @РусланХ :这回答了您最初的问题。如果您认为它有效,请接受它。如果还有其他问题,请考虑询问新的问题并提供所需的详细信息。 我已经尝试过您的解决方案。将两个数组都更改为表,它的工作方式应该是这样。再次感谢您!

以上是关于如何将表的一列值保存到数组中?的主要内容,如果未能解决你的问题,请参考以下文章

MS SQL Server 中是不是有任何方法可以使用某种链接将表的一列映射到另一个数据库?

将表列值存储到变量中(SQL Server)

如何将充满文本字段的 HTML 表的更改保存到数据库

mysql如何根据一列值更新另一列的值?

sql怎么把一个表的一列替换到对应的另一个表中对应的列?

如何将约束添加到 MYSQL 中的列仅以保存已存在于同一表的另一列中的值? [复制]