【发布时间】:2021-11-18 22:38:26
【问题描述】:
我正在尝试理解 plpgsql 中的事务,我想要一些解释。
我有这个代码:
CREATE OR REPLACE PROCEDURE MaJ(mode IN INT)
AS
$$
DECLARE
r RECORD;
DECLARE
r RECORD;
BEGIN
FOR r IN SELECT id, fname, lname, bday FROM usr
LOOP
IF r.ID % 2 = 0 THEN
UPDATE usr SET lname = 'KONAN';
RAISE NOTICE E'fname : %\n', r.lname;
END IF;
END LOOP;
IF mode = 0 THEN
COMMIT;
ELSE IF mode = 1 THEN
ROLLBACK;
END IF;
END;
- 首先,在获得并尝试所有可能的解决方案之后,根据过程参数实现提交/回滚的最佳方法是什么。
- 其次,除了提交回滚问题,postgres 忽略了 if
IF r.ID % 2 = 0 THEN并更新所有条目,谢谢您的解释。
我正在使用 CALL MaJ(VAL); 从另一个过程调用此过程
更新: 也许这段代码更好地描述了 hte 问题: 这是我正在尝试做的事情:
CREATE OR REPLACE PROCEDURE CRDM(Crtrn INOUT INT)
AS
$CRDM$
DECLARE
R RECORD;
BEGIN
FOR R IN SELECT * FROM usr
LOOP
IF R.ID % 2 = 0 THEN
UPDATE USR SET lname = 'MAGNI' WHERE USR.ID = R.ID;
END IF;
END LOOP;
IF Crtrn = 0 THEN
COMMIT;
ELSE
ROLLBACK;
END IF;
END;
$CRDM$ LANGUAGE plpgsql;
CREATE OR REPLACE PROCEDURE AMI()
AS
$AMI$
DECLARE
rtrn INT:=0;
BEGIN
BEGIN
CALL CRDM(rtrn);
END;
END;
$AMI$ LANGUAGE plpgsql;
DO
$$
BEGIN
CALL AMI();
END;
$$ LANGUAGE plpgsql;
欢迎任何关于我所缺少的内容以及如何更好地思考交易的帮助。
【问题讨论】:
-
最好是见仁见智。但是为什么不对布尔值使用布尔值呢?
-
@jjanes 很抱歉,这种语言让我很头疼,能否详细说明您的观点,谢谢
标签: postgresql stored-procedures plpgsql psql