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



我有一个非常复杂的PL/SQL过程,可以多次动态选择数据。最终,数据被聚合并返回。

但是,由于多次选择,返回的数据可能不一致,因为不同的选择之间可能会发生数据更改。一个过程可能看起来像这样:

  • 选择数据1
  • 从其他会话更改
  • 选择数据2-->由于更改,数据2现在可能与数据1不一致

不幸的是,我无法一次选择所有数据。这太复杂了。

甲骨文有没有办法以某种方式";冻结";数据状态(不考虑任何传入的更改(,直到程序完成?

您正在寻找Oracle的可串行隔离级别:

在可序列化隔离级别中,事务只看到在事务(而不是查询(开始时提交的更改以及事务本身所做的更改。

它是这样启动的:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

最新更新