使用存储过程 PostgreSQL 11.1 从 table 检索数据
Retrieve data from table using stored procedure PostgreSQL 11.1
我有包含两列 cola
和 colb
的 table。
我想使用存储过程来处理 table 中的 select 列。
注意:由于 return 类型,我不想使用函数。
尝试:
CREATE OR REPLACE PROCEDURE public.sptest()
LANGUAGE sql
AS $BODY$
select cola from test;
$BODY$;
调用程序:
call sptest()
输出:
数据输出中没有任何内容。
消息window显示:
CALL
Query returned successfully in 147 msec.
您需要将 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');
传递的参数是返回的refcursor的名称。
是否显示结果取决于您使用的 SQL 客户端。
在 psql
中,您需要执行以下操作:
begin; -- not required if you turned off autocommit
call sptest('data');
fetch all in "data";
commit;
一些 SQL 客户端会自动为您执行此操作。
我有包含两列 cola
和 colb
的 table。
我想使用存储过程来处理 table 中的 select 列。
注意:由于 return 类型,我不想使用函数。
尝试:
CREATE OR REPLACE PROCEDURE public.sptest()
LANGUAGE sql
AS $BODY$
select cola from test;
$BODY$;
调用程序:
call sptest()
输出:
数据输出中没有任何内容。
消息window显示:
CALL
Query returned successfully in 147 msec.
您需要将 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');
传递的参数是返回的refcursor的名称。
是否显示结果取决于您使用的 SQL 客户端。
在 psql
中,您需要执行以下操作:
begin; -- not required if you turned off autocommit
call sptest('data');
fetch all in "data";
commit;
一些 SQL 客户端会自动为您执行此操作。