如何在 oracle 19c 的 MERGE 语句中使用提交?

Posted

技术标签:

【中文标题】如何在 oracle 19c 的 MERGE 语句中使用提交?【英文标题】:How to use commit in MERGE statement in oracle 19c? 【发布时间】:2021-07-31 14:18:55 【问题描述】:

是否可以在 oracle 19c 中使用 MERGE 语法中的提交语句?我想在每 1000 次更新和每 1000 次插入后执行一次提交,如何实现?

MERGE INTO target_table 
USING source_table 
ON search_condition
    WHEN MATCHED THEN
        UPDATE SET col1 = value1, col2 = value2,...
        WHERE <update_condition>
        [DELETE WHERE <delete_condition>]
    WHEN NOT MATCHED THEN
        INSERT (col1,col2,...)
        values(value1,value2,...)
        WHERE <insert_condition>;

如果上述情况不可行,那么您通常如何查找是否插入/更新了 1000 行并相应地执行提交?

【问题讨论】:

【参考方案1】:

你不能,不在MERGE 本身内。提交一次,一切都完成后。

此外,您为什么要频繁提交?您期望得到什么好处?

如果必须如您所述,请使用循环并在 chunks 的 1000 行中执行,然后提交。当您经常在循环内提​​交时,请注意可能(或可能不会)发生的 ORA-01555。

【讨论】:

所以你的意思是说,我的方法必须像插入语句后跟一个循环来提交 1000 条记录。我在一次在线测验中被问到这个问题,我知道这些类型的提交不会应用于业务中的实时场景。 啊,测验。循环它,但您可以将“1000 行”条件放入source_table 子句中,以便每次循环迭代操作 1000 行。

以上是关于如何在 oracle 19c 的 MERGE 语句中使用提交?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 19C学习

SSIS 执行 SQL 任务,受 MERGE 语句影响的行(Oracle 和 SQL Server)

Oracle merge into 的效率问题

oracle10客户端如何连接19c

Oracle Merge语句

Oracle MERGE语句