如何在没有匿名块的情况下将过程输出参数存储在临时表中



是否可以在不创建匿名块的情况下将过程输出参数存储在postgres中?

想象一下这样的场景:

create or replace procedure test(in one integer, in two integer, inout three integer)
language plpgsql
as
$$
begin
three:=one+two;
end
$$

如果我这样称呼它:


call test(2,2,null);

结果是4,但如果我尝试将结果添加到这样的临时表中:

create temp table store(a int);
insert into store (a) 
call test(2,2,null);

我有错误:

错误:语法错误在"处或附近;呼叫";线路15:呼叫测试(2,2,空(;^SQL状态:42601字符:253

为了避免do语句(因为我必须在纯sql中这样做(,我不知道如何存储输出变量。

使用函数而非过程:

CREATE OR REPLACE FUNCTION public.test(one integer, two integer)
RETURNS integer
LANGUAGE plpgsql
AS $function$
declare
three integer;
begin
three:=one+two;
return three;
end
$function$
;
select * from test(2,2);
test 
------
4
create temp table store(a int);
insert into store (a) select * from test(2,2);
select * from store;
a 
---
4

函数可以返回select中的值。

最新更新