整数引数を受け入れ、テーブルから行のセットを返すセット戻り関数(SRF)があります。を使用して呼び出しSELECT * FROM tst.mySRF(3);
、戻り値をテーブルのように操作します。
私がやりたいのは、配列の各要素でそれを実行することです。ただし、を使用して呼び出すとSELECT * FROM tst.mySRF(unnest(array[3,4]));
、「セットを受け入れることができないコンテキストで呼び出されたセット値関数」というエラーが返されます。代わりにを使用して呼び出すとSELECT tst.mySRF(unnest(array[3,4]));
、タイプのセットを取得しtst.tbl
ます。
テーブル定義:
DROP TABLE tst.tbl CASCADE;
CREATE TABLE tst.tbl (
id serial NOT NULL,
txt text NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO tst.tbl(txt) VALUES ('a'), ('b'), ('c'), ('d');
関数の定義:
CREATE OR REPLACE FUNCTION tst.mySRF(
IN p_id integer
)
RETURNS setof tst.tbl
LANGUAGE plpgsql
AS $body$
DECLARE
BEGIN
RETURN QUERY
SELECT id, txt
FROM tst.tbl
WHERE id = p_id;
END;
$body$;
呼び出し:
SELECT * FROM tst.mySRF(3)
期待どおりにテーブルを返します。SELECT tst.mySRF(unnest(array[3,4]))
期待どおり、タイプが単一の列を持つテーブルを返しますtst.tbl
。SELECT * FROM tst.mySRF(unnest(array[3,4]))
上記のエラーを返します、私はテーブルを期待していました。