gpt4 book ai didi

PostgreSQL 11 - 程序

转载 作者:行者123 更新时间:2023-11-29 11:40:05 28 4
gpt4 key购买 nike

拥有最新更新的PostgreSQL配套程序。官方博客引用了“与函数相反,程序不需要返回值。” ( https://blog.2ndquadrant.com/postgresql-11-server-side-procedures-part-1/ )

所以我的问题是,实际上有什么方法可以让我在过程中返回错误代码或响应吗? (过程在 Postgres 中是相当新的,因此在线资源很少。)

这是我返回这些“错误代码”的意思的示例

create or replace PROCEDURE multislot_Update_v1
(
p_id in varchar2,
p_name in varchar2,
p_enname in varchar2,
results out SYS_REFCURSOR
) AS
rowNumber int;
defaultNumber int;
BEGIN

select count(1) into rowNumber from MULTISLOTSGAME where fid=P_id;

if (rowNumber = 0) then
open results for
select '1' as result from dual;
return;
end if;

update MULTISLOTSGAME set
name = P_name,
enname = P_enname
where fid = P_id ;
commit;

open results for
select '0' as result, t1.* from MULTISLOTSGAME t1 where fid = p_id;

END multislot_Update_v1;

上面的脚本是一个Oracle过程,你可以看到如果返回结果是“1”就说明更新不成功。

有什么方法可以将上述脚本(带有错误代码)编写为 PostgresSQL 过程?也许使用“INOUT”参数的例子会很棒!

最佳答案

您可以在过程中使用 INOUT 参数。

您使用 CALL 调用过程陈述;如果有任何 INOUT 参数,该语句将像 SELECT 一样返回结果行。

这是一个使用返回 refcursor 的过程的示例:

CREATE PROCEDURE testproc(INOUT r refcursor) LANGUAGE plpgsql AS
$$BEGIN
r := 'cur';
OPEN r FOR VALUES (1), (42), (12321);
END;$$;

BEGIN;

CALL testproc(NULL);

r
-----
cur
(1 row)

FETCH ALL FROM cur;

column1
---------
1
42
12321
(3 rows)

COMMIT;

关于PostgreSQL 11 - 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50940438/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com