9

我有一张桌子,其中两个人可能有相同的名字,但有不同的 ID。我得到了这个名字,并且需要请求他们的 ID。

当我使用如下命令时:

SELECT id_num INTO cust_id FROM Customers WHERE name=CName; 

如果我在命令行 (psql) 上使用此命令,它会返回 2 个结果(例如)。

但是当我将它用作 SQL 脚本 (PL/pgSQL) 的一部分时,它总是只抓取第一个实例。

我尝试选择 into cust_id[],但这产生了错误。那么选择所有结果并将它们泵入数组或其他简单的使用方法的正确方法是什么?

4

2 回答 2

14

在声明中

  DECLARE id_nums bigint[];

在选择

id_nums :=  ARRAY(select cust_id from Customers WHERE name = CName);

如果您更喜欢循环使用

DECLARE id_num bigint;

FOR id_num in select cust_id from Customers WHERE name = CName LOOP
  your code here
END LOOP;

阅读 postgresql docs 9.1中的 plpgsql 控制结构。

于 2012-11-09T16:55:50.820 回答
7

要将单个行中的数据放入数组中,请使用数组构造函数

DECLARE id_nums int[];  -- assuming cust_id is of type int

id_nums := ARRAY (SELECT cust_id FROM customers WHERE name = cname);

或者聚合函数 array_agg()

id_nums := (SELECT array_agg(cust_id) FROM customers WHERE name = cname);

SELECT INTO用于作业::

SELECT INTO id_nums
       ARRAY (SELECT cust_id FROM customers WHERE name = cname);
于 2012-11-09T18:07:14.897 回答