oracle中并发事务的输出是什么

oracle中并发事务的输出是什么,oracle,concurrency,transactions,sql-merge,Oracle,Concurrency,Transactions,Sql Merge,假设,我发出merge语句来合并两个表。有大量的数据,所以merge命令正在运行。在中途,另一个用户在源表中插入了新数据。那么,新数据是否会作为merge命令的一部分被读取?Oracle的数据并发模型是这样的:给定的事务只能在事务启动时看到数据库。它看不到在启动后开始的任何更改。而且它没有看到在它启动时发生的任何未限制的更改。请参阅手册中有关事务管理的讨论。合并语句比较复杂。正如@EdStevens所写的,会话应该只看到语句开始之前的数据。这是甲骨文的thmb规则 另一方面,我想说,你的陈述很可

假设,我发出merge语句来合并两个表。有大量的数据,所以merge命令正在运行。在中途,另一个用户在源表中插入了新数据。那么,新数据是否会作为merge命令的一部分被读取?

Oracle的数据并发模型是这样的:给定的事务只能在事务启动时看到数据库。它看不到在启动后开始的任何更改。而且它没有看到在它启动时发生的任何未限制的更改。请参阅手册中有关事务管理的讨论。

合并语句比较复杂。正如@EdStevens所写的,会话应该只看到语句开始之前的数据。这是甲骨文的thmb规则

另一方面,我想说,你的陈述很可能会失败,因为:

ORA-30926: unable to get a stable set of rows in the source tables
Cause: A stable set of rows could not be got because of large dml activity or a non-deterministic where clause.
无论何时调用MERGE,都要准备好它可能会失败,并且必须重新执行

合并语句对于各种情况似乎是一把有用的瑞士军刀。 但是使用它时要小心。通常,当MERGE语句只使用updatepart时,可更新的连接将更加有效

Merge还可以触发各种触发器INSERT/UPDATE/DELETE BEFORE/AFTER,并记录触发器触发的顺序,但实际上它可能无法按照记录的那样工作


在Postgres上有大量非常有趣的讨论,他们解释了为什么他们没有实现ISO SQL MERGE,而是实现了专有但更可靠的UPSERT。

No,MERGE语句将看不到插入源表的数据。感谢大家的输入…我尝试了,是的..MERGE命令只考虑了前一组记录。