我有一个非常复杂的PL/SQL过程,可以多次动态选择数据。最终,数据被聚合并返回。
但是,由于多次选择,返回的数据可能不一致,因为不同的选择之间可能会发生数据更改。一个过程可能看起来像这样:
- 选择数据1
- 从其他会话更改
- 选择数据2-->由于更改,数据2现在可能与数据1不一致
不幸的是,我无法一次选择所有数据。这太复杂了。
甲骨文有没有办法以某种方式";冻结";数据状态(不考虑任何传入的更改(,直到程序完成?
您正在寻找Oracle的可串行隔离级别:
在可序列化隔离级别中,事务只看到在事务(而不是查询(开始时提交的更改以及事务本身所做的更改。
它是这样启动的:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;