"Freeze" Oracle PL/SQL 过程中的数据状态

"Freeze" data state in an Oracle PL/SQL procedure

我有一个相当复杂的 PL/SQL 程序 select 多次动态地处理数据。最终,数据被聚合并返回。

但是,由于有多个select,返回的数据可能会不一致,因为不同的select之间可能会发生数据变化。流程可能如下所示:

不幸的是,我无法使用单个 select 一次 select 所有数据。这样就太复杂了。

Oracle 中是否有一种方法可以以某种方式“冻结”数据状态(不考虑任何传入的更改)直到过程完成?

您正在寻找 Oracle 的 Serializable Isolation Level:

In the serializable isolation level, a transaction sees only changes committed at the time the transaction—not the query—began and changes made by the transaction itself.

是这样开始的:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;