如何调用在 FROM 子句中多次返回记录的函数?我了解在使用返回记录的函数时必须指定“列定义列表”。但是我怎样才能为该功能使用别名呢?
例子:
CREATE OR REPLACE FUNCTION foo(which_foo int) RETURNS SETOF RECORD AS
$BODY$BEGIN
IF which_foo=0 THEN
RETURN QUERY EXECUTE 'SELECT 1::int,2::int;';
ELSE
RETURN QUERY EXECUTE 'SELECT 1::int,2::int;';
END IF;
END$BODY$
LANGUAGE plpgsql;
SELECT * FROM foo(0) AS (a int, b int);;
SELECT * FROM foo(1) AS (c int, d int);
SELECT * FROM foo(0) AS (a int, b int), foo(1) AS (c int, d int);
最后一个 select 语句将失败,并显示:
ERROR: table name "foo" specified more than once
我想继续使用列定义列表,因为我最终要使用的函数必须尽可能通用。