【发布时间】:2021-02-03 15:41:10
【问题描述】:
我有以下带有 INOUT 参数的 Postgres 存储过程。
PROCEDURE inner_proc(IN pid INT, INOUT pmsg TEXT);
我可以从匿名块中成功调用此过程。
do
$$
declare
v_id int := 4;
v_msg text;
begin
call inner_proc(pid => v_id, pmsg => v_msg);
raise notice '%', v_msg;
end;
$$
language plpgsql;
匿名块打印'Success' 符合预期。
但是当我在另一个过程中调用这个过程时,它失败了。
PROCEDURE outer_proc()
as
$$
declare
v_id int := 4;
v_msg character varying(1000);
begin
call inner_proc(pid => v_id, pmsg => v_msg);
raise notice '%', v_msg;
end;
$$
language plpgsql;
当我调用上述程序outer_proc 时,我收到以下错误。
call outer_proc();
ERROR: procedure parameter "pmsg" is an output parameter but corresponding argument is not writable
有人可以帮忙解决这个问题吗?
【问题讨论】:
-
@LaurenzAlbe 我发现问题是因为inner_proc 的INOUT 参数是TEXT 数据类型,而我从outer_proc 传递了一个CHARACTER VARYING 参数。感谢您调查它。
-
为什么不让“inner_proc”成为一个返回状态的函数呢?
-
@a_horse_with_no_name,这只是我根据我正在工作的实际程序创建的示例程序。我不应该将其更改为函数,因为它会影响许多其他应用程序。