我有一个存储过程,它依次调用其他几个存储过程;它们中的每一个都返回 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 之后写入的内存表?还是有更好的方法来实现这一目标?
非常感谢。