在 Postgresql 中返回“记录”的函数需要列定义列表

use*_*361 6 sql postgresql

在下面的 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)

Mar*_*oon 6

它返回一个记录,

所以你应该调用如下函数,

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)

  • 我只是执行它 db 它运作良好。但是我应该在哪里放置这个查询。或者我是否需要创建另一个函数并放置这个查询 (2认同)