gpt4 book ai didi

oracle - 如何在发出回滚前检查保存点是否已经建立?

转载 作者:行者123 更新时间:2023-12-04 16:50:01 25 4
gpt4 key购买 nike

我有一个 Oracle 包,它循环遍历过程列表并动态调用它们。在每次过程调用之前,都会创建一个 SAVEPOINT,如果出现异常,它会发出回滚并记录问题。最近引入了一个错误,其中一个动态过程向其添加了 COMMIT,触发后会使 SAVEPOINT 无效。如果同一过程随后失败(引发异常)并且调用包的异常处理程序尝试回滚,则会在异常处理程序 block 内部引发以下异常:

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

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

最佳答案

我认为您将不得不忘记它;对不起。 2013 年 4 月有人问 Tom Kyte 这个问题,his response :

2) where does oracle keep track of savepoint we create?And is SCN being created for the savepoints created?

and we said...

...

2) a savepoint is just conceptually a pointer into your undo stream. We do not need an SCN for it, we just need to know how far back in your undo stream to rollback to.

两者都是Jonathan LewisBurleson不要认为它们存储在数据字典中的任何位置。如果您使用 Workspace Manager或者想使用 Restore Points然后数据将存储在ALL_WM_MODIFIED_TABLES中和 V$RESTORE_POINT分别,但这似乎有点矫枉过正。

关于oracle - 如何在发出回滚前检查保存点是否已经建立?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19766710/

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