我的表有两列cola
和colb
。
我想使用存储过程从表中选择列。
注意:由于返回类型,我不想使用函数。
尝试:
CREATE OR REPLACE PROCEDURE public.sptest()
LANGUAGE sql
AS $BODY$
select cola from test;
$BODY$;
呼叫过程:
call sptest()
输出:
数据输出中没有任何内容。
消息窗口显示:
CALL
Query returned successfully in 147 msec.
答案 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客户端会自动为您执行此操作。