9

私は、2 人の人物が同じ名前で ID が異なる可能性があるテーブルを持っています。名前が与えられ、ID を要求する必要があります。

次のようなコマンドを使用すると:

SELECT id_num INTO cust_id FROM Customers WHERE name=CName; 

コマンド ライン (psql) でこのコマンドを使用すると、2 つの結果が返されます (たとえば)。

しかし、SQL スクリプト (PL/pgSQL) の一部として使用すると、常に最初のインスタンスが取得されます。

に選択しようとしまし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;

postgresqldocs9.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 に答える