使用存储过程PostgreSQL 11.1从表中检索数据

时间:2019-01-08 09:15:19

标签: postgresql postgresql-11

我的表有两列colacolb

我想使用存储过程从表中选择列。

注意:由于返回类型,我不想使用函数。

尝试:

CREATE OR REPLACE PROCEDURE public.sptest()
LANGUAGE sql

AS $BODY$
         select cola from test;
$BODY$;

呼叫过程:

call sptest()

输出:

数据输出中没有任何内容。

消息窗口显示:

CALL

Query returned successfully in 147 msec. 

1 个答案:

答案 0 :(得分:4)

您需要将refcursor定义为inout参数才能执行此操作:

CREATE OR REPLACE PROCEDURE public.sptest(result_data inout refcursor)
LANGUAGE plpgsql
AS $BODY$
begin
  open result_data for select cola from test;
end;
$BODY$;

然后这样称呼它:

call sptest('data');

传递的参数是返回的反射器的名称。

是否显示结果取决于您使用的SQL客户端。

psql中,您需要执行以下操作:

begin; -- not required if you turned off autocommit
call sptest('data');
fetch all in "data";
commit;

某些SQL客户端会自动为您执行此操作。