postgresql Postgres中的存储过程不返回值

bq3bfh9z  于 2023-05-17  发布在  PostgreSQL
关注(0)|答案(1)|浏览(346)

我是Postgres的新手,创建了一个简单的表:

create table aeroplanes 
(
    plane_id int generated by default as identity,
    name varchar(100) not null,
    speed INTEGER not null,
    primary key(plane_id)
);

insert into aeroplanes (name, speed)
values ('saab', 2500);

insert into aeroplanes (name, speed)
values ('boeing', 800);

我的存储过程如下:

CREATE OR REPLACE PROCEDURE search_airplane_name(name_param varchar)
LANGUAGE sql
AS $$
SELECT * FROM aeroplanes
WHERE name = name_param;
$$;

但当调用具有以下内容的过程时:

CALL search_airplane_name('saab');

在pgadmin的消息中,我得到以下内容:
查询成功返回
但我看不到任何结果,当我单击数据输出选项卡时,它显示:
无数据输出
但我看不到任何输出,如果我单击

rhfm7lfc

rhfm7lfc1#

存储过程不必返回任何内容,在使用INOUT参数时只返回一行。
所以你需要一个function

CREATE OR REPLACE FUNCTION search_airplane_name(name_param varchar)
returns setof aeroplanes 
LANGUAGE SQL
AS $$
SELECT * FROM aeroplanes
WHERE name = name_param;
$$;

然后运行:

SELECT * FROM search_airplane_name('saab');

Demo here

相关问题