我有一个集合返回函数 (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]))
返回上面描述的错误,我期待一个表。