Postgresql
PLPGSQL 將 2D 查詢輸出的列儲存到數組變數中
在 plpgsql 函式的某個步驟中,我需要將 2D 查詢結果儲存到數組變數中。
以下程式碼為標量完成工作(但對數組失敗):
SELECT col_a, col_b FROM my_table WHERE col_c = condition INTO var_a, var_b;
以下為 ONE 列和 ONE 數組變數完成了這項工作,但僅此而已:
SELECT ARRAY( SELECT col_a FROM my_table WHERE col_c > condition ) INTO arr_a;
如何將 col_a、b、c、d… 中的多行儲存到它們各自的數組變數中,而不必對每一列進行單獨的查詢?與第一個程式碼範例一樣,但用於多行和數組。
用於
array_agg()
建構陣列。注意,它也會聚合NULL
,所以請確保這是您想要的。帶有數據和範例函式的dbfiddle 。
我假設 on 的謂詞對於和
col_c
都是相同的。如果它們需要單獨的謂詞,您將不得不使用或其他一些構造。我在小提琴中舉了一個例子。col_a``col_b``FILTER``FILTER
輸入表:
CREATE TABLE my_table(col_a int, col_b int, col_c int); INSERT INTO my_table VALUES (1, 11, 21), (2, 12, 22), (3, 13, 23), (4, 14, 24), (5, 15, 25), (6, 16, 26), (7, 17, 27), (8, 18, 28), (9, 19, 29), (10, 20, 30);
功能:
CREATE OR REPLACE FUNCTION array_load() RETURNS RECORD LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE STRICT AS $function$ DECLARE arr_a integer[]; arr_b integer[]; BEGIN SELECT array_agg(col_a), array_agg(col_b) FROM my_table WHERE col_c > 26 INTO arr_a, arr_b; RETURN (arr_a, arr_b); END; $function$
輸出:
select array_load(); array_load -------------------------------- ("{7,8,9,10}","{17,18,19,20}") (1 row)
參考:https ://www.postgresql.org/docs/current/functions-aggregate.html