在下面的 Postgresql 函数中,我试图从 2 个不同的表中获取结果,但它抛出错误错误:42601:返回“记录”的函数需要列定义列表。任何人都可以帮助我。
CREATE OR REPLACE FUNCTION load_page_record(IN _session INT) RETURNS RECORD AS
$$
DECLARE r1 RECORD;
DECLARE r2 RECORD;
DECLARE RESULT RECORD;
BEGIN
SELECT array_agg(sq.*) AS arr INTO r1
FROM (SELECT user_id, user_name
FROM "user"
) sq;
SELECT array_agg(sq.*) AS arr INTO r2
FROM (SELECT client_id, client_name
FROM "clients"
) sq;
SELECT r1.arr, r2.arr INTO RESULT;
RETURN RESULT;
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
它返回一个记录,
所以你应该调用如下函数,
select load_page_record(5);
Run Code Online (Sandbox Code Playgroud)
如果您将其称为表格,则会出现错误
select * from load_page_record(5);
Run Code Online (Sandbox Code Playgroud)
如果你想返回一个表的地方,你在正文中使用 join 查询,如下所示,
CREATE OR REPLACE FUNCTION load_page_record1(IN _session INT)
RETURNS TABLE (column1 integer, column2 integer) as
$BODY$
SELECT column1, column2
FROM
table1 a
join
table2 b
ON a.id = b.id
$BODY$
LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)