评估顺序-合并查询



在oracle合并查询中求值的顺序是什么?

例如:

MERGE INTO SCEHMA.TABLE updtab
USING (SELECT * FROM SOURCE_VIEW) fromtab
ON (updtab.key = fromtab.key)
WHEN MATCHED THEN UPDATE SET 
updtab.field_1 = case when (updtab.field_1 is null) then fromtab.val_1 end,
updtab.field_2 = case when (updtab.field_1 is null) then fromtab.val_2 end;

field_1为null的两种情况会立即评估吗?还是每个集合都会按顺序执行,而field_2的第二个总是失败,因为field_1在第一个集合行之后将不再为null?

SQL的标准是,我相信选择总是先发生,但这是在更新步骤中吗?Oracle文档不清楚,这让我感到疑惑。

所有事情都发生在单个语句MERGE中。Oracle"始终强制执行语句级读取一致性,从而确保单个查询返回的数据在单个时间点上是提交的和一致的">。在这种情况下,时间点是语句"是"的时间;打开"-它开始执行的时间。

这意味着field_1MERGE语句的所有部分视为相同的数据,直到该语句终止。CCD_ 4被评估一次并且每次更新被执行,就好像数据没有改变一样。

在一个事务中,您是正确的。在默认的读取提交隔离级别中,不可重复的读取是可能的。如果重新运行SELECT语句,并且另一个事务已提交数据,则第一个事务读取的数据可能不同。MERGE是一个语句,而不是一个事务。

相关内容

  • 没有找到相关文章

最新更新