"Freeze" Oracle PL/SQL 过程中的数据状态
"Freeze" data state in an Oracle PL/SQL procedure
我有一个相当复杂的 PL/SQL 程序 select 多次动态地处理数据。最终,数据被聚合并返回。
但是,由于有多个select,返回的数据可能会不一致,因为不同的select之间可能会发生数据变化。流程可能如下所示:
- Select数据1
- 从不同的会话更改
- Select数据2
--> 由于更改,数据 2 现在可能与数据 1 不一致。
不幸的是,我无法使用单个 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;
我有一个相当复杂的 PL/SQL 程序 select 多次动态地处理数据。最终,数据被聚合并返回。
但是,由于有多个select,返回的数据可能会不一致,因为不同的select之间可能会发生数据变化。流程可能如下所示:
- Select数据1
- 从不同的会话更改
- Select数据2 --> 由于更改,数据 2 现在可能与数据 1 不一致。
不幸的是,我无法使用单个 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;