首页 > 解决方案 > 存储过程没有数据输出(Postgresql)

问题描述

我有一个 select 语句的基本存储过程。select 语句本身可以工作并向我显示数据输出,但是当我尝试从存储过程中调用它时,它显示“CALL Query 在 107 毫秒内成功返回”,但没有数据输出。我的存储过程中是否缺少某些内容?(我还将 AWS 上的数据库与基本层连接起来,不确定这是否会有所不同。除 select 外,其他所有 CRUD 操作都有效。)

CREATE PROCEDURE 
    experiment1()
LANGUAGE SQL
AS $$
    SELECT * FROM assignment    
$$

标签: sqlpostgresqlselectstored-proceduressql-function

解决方案


Postgres 过程不返回任何内容。您可以改用函数,使用return query语法。这需要枚举查询返回的列。假设您的表有两列,id并且val,那将是:

create function experiment() 
returns table (id int, val text)
as $$
begin
    return query select * from assignment;
end;
$$ language plpgsql;

然后,您可以像这样调用这个 set-returning 函数:

select * from experiment();

DB Fiddle 上的演示

create table assignment (id int, val text);
insert into assignment values(1, 'foo'), (2, 'bar');
-- 2 rows affected

create function experiment() 
returns table (id int, val text)
as $$
begin
    return query select * from assignment;
end;
$$ language plpgsql;

select * from experiment();
编号 | 值
-: | :--
 1 | 富
 2 | 酒吧

推荐阅读