Oracle 在发出回滚之前,如何检查保存点是否已建立?

Oracle 在发出回滚之前,如何检查保存点是否已建立?,oracle,transactions,rollback,savepoints,Oracle,Transactions,Rollback,Savepoints,我有一个Oracle软件包,它循环遍历一系列过程并动态调用它们。在每次过程调用之前,都会创建一个保存点,如果引发异常,则会发出回滚并记录问题。最近引入了一个bug,其中一个动态过程添加了一个COMMIT,一旦触发,就会使保存点失效。如果该过程随后失败(引发异常),并且调用包的异常处理程序尝试回滚,则在异常处理程序块内引发以下异常: ORA-01086: savepoint 'EXAMPLE_SAVEPOINT' never established in this session or is in

我有一个Oracle软件包,它循环遍历一系列过程并动态调用它们。在每次过程调用之前,都会创建一个保存点,如果引发异常,则会发出回滚并记录问题。最近引入了一个bug,其中一个动态过程添加了一个COMMIT,一旦触发,就会使保存点失效。如果该过程随后失败(引发异常),并且调用包的异常处理程序尝试回滚,则在异常处理程序块内引发以下异常:

ORA-01086: savepoint 'EXAMPLE_SAVEPOINT' never established in this session or is invalid

现在,我可以在我的异常处理程序中放置另一个异常处理程序来处理这个特定的异常,但是如果我可以在尝试发出回滚之前快速检查保存点,看看它是否有效,这将更加整洁。这可能吗?

我想你得忘掉它;很抱歉2013年4月,有人问Tom Kyte这个问题:

2) oracle在哪里跟踪我们创建的保存点?SCN在哪里 正在为已创建的保存点创建

我们说…

2) 保存点在概念上只是指向撤消流的指针。 我们不需要一个SCN,我们只需要知道有多远 要回滚到的撤消流


两者都不存在,而且不认为它们存储在数据字典中的任何位置。如果您正在使用或想要使用,则数据将分别存储在和中,但这似乎有些过分。

我怀疑是这种情况,但找不到您提供的我正在寻找的确认信息。谢谢你,先生。