我有一个 Oracle 包,它循环遍历过程列表并动态调用它们。在每个过程调用之前,都会创建一个 SAVEPOINT,如果引发异常,它会发出回滚并记录问题。最近引入了一个错误,其中一个动态过程添加了一个 COMMIT,当触发它时,SAVEPOINT 无效。如果相同的过程随后失败(引发异常)并且调用包的异常处理程序尝试回滚,则在异常处理程序块内引发以下异常:
ORA-01086: savepoint 'EXAMPLE_SAVEPOINT' never established in this session or is invalid
现在,我可以在我的异常处理程序中放置另一个异常处理程序来处理这个特定的异常,但是如果我可以在尝试发出之前快速检查 SAVEPOINT 以查看它是否有效,那会更整洁回滚。这可能吗?