gpt4 book ai didi

postgresql - PostGreSQL-控制交易

转载 作者:行者123 更新时间:2023-12-03 08:39:11 24 4
gpt4 key购买 nike

我有一个存储过程,该存储过程又调用了其他几个存储过程。它们每个都返回true或false,并通过将错误存储到表中在内部进行处理。
像这样:

-- (MAIN STORED PROCEDURE)
BEGIN
CALL STORED_PROC_1('WW','TT','FF',result);
IF result = TRUE then
CALL STORED_PROC_2('a','b','c',result);
...
END IF;
END;

IF result != TRUE THEN
ROLLBACK;
ELSE
COMMIT;
END IF;

-- (END MAIN STORED PROCEDURE)

-------
--Example of Stored Procedure 1
CREATE OR REPLACE PROCEDURE STORED_PROC_1 (IN a TEXT, IN b TEXT, IN c TEXT, INOUT result boolean)
AS $BODY$
BEGIN

-- DO SOME STUFF HERE

IF ERROR_FOUND THEN
INSERT INTO ERROR_LOG VALUES ('Error','Type of Error',CURRENT_DATE);
--COMMIT; (I cannot do this commit here but I would like to save the information going into the ERROR_LOG table)
result := FALSE;
ELSE
result := TRUE;
END IF;
END;
$BODY$;

这实际上是我想要的;仅在全部返回TRUE时才提交;
问题是,在STORED_PROC_1或_2内,有一些错误处理会写入错误日志表,并且...如果有错误,它们将在结果中返回FALSE,进而将调用回滚,而我将丢失错误日志。
有没有一种方法可以创建一种可以向我加载错误信息并在ROLLBACK之后将其写入的内存表?还是有更好的方法来实现这一目标?
非常感谢。

最佳答案

好的,这就是现在的样子。

-- (MAIN STORED PROCEDURE)
BEGIN
CALL STORED_PROC_1('WW','TT','FF',result);
IF result = TRUE then
CALL STORED_PROC_2('a','b','c',result);
...
END IF;
END;

IF result != TRUE THEN
ROLLBACK;
ELSE
COMMIT;
END IF;

-- (END MAIN STORED PROCEDURE)

-------
--Example of Stored Procedure 1
CREATE OR REPLACE PROCEDURE STORED_PROC_1 (IN a TEXT, IN b TEXT, IN c TEXT, INOUT result boolean)
AS $BODY$
BEGIN

-- DO SOME STUFF HERE

IF ERROR_FOUND THEN
PERFORM * FROM "Schema".func_errlog('Error','Type of Error',CURRENT_DATE);
IF FOUND
THEN
result := FALSE;
END IF;
ELSE
result := TRUE;
END IF;
END;
$BODY$;
该功能是您基本上在此处提供的功能的副本。
因此,我仍然有相同的错误。在Main过程中,如果我调用ROLLBACK(由于错误,我想回滚所有内容,但是我想保存该错误,并且函数会保存它,但是稍后会受到ROLLBACK的影响...
难道我做错了什么?据我了解,这应该现在就可以工作了...
谢谢你的支持。

关于postgresql - PostGreSQL-控制交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63673634/

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