我有点怀疑。让我们假设这个包的过程:
PROCEDURE ERR_MANAGER(I_ERRM IN VARCHAR2) IS
BEGIN
ROLLBACK;
--DO SOME STUFF
END ERR_MANAGER;
PROCEDURE test IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
test2;
COMMIT;
EXCEPTION WHEN OTHERS THEN ERR_MANAGER(SQLERRM);
END test;
PROCEDURE test2 IS
BEGIN
--DO SOME TRANSACTIONNAL DML
RAISE_APPLICATION_ERROR(-20001, 'ERR'); --for the test purpose, in reality this could be any actual error
END test2;
因此,如您所见, 中存在错误test2()
,该错误将上升到test()
,然后在err_manager()
方法中进行处理。
所以我有两个问题:
- err_manager() 的范围是什么?是否还在自治事务内?我想是的,因为它只是一个函数调用,但我想确定
- 如果由于错误提升到更高级别而残酷地退出自治事务,而不进行任何类型的提交或回滚,会发生什么?
非常感谢你。S。