【问题标题】:How to use commit in MERGE statement in oracle 19c?如何在 oracle 19c 的 MERGE 语句中使用提交?
【发布时间】: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 行并相应地执行提交?

【问题讨论】:

    标签: oracle merge insert updates commit


    【解决方案1】:

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

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

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

    【讨论】:

    • 所以你的意思是说,我的方法必须像插入语句后跟一个循环来提交 1000 条记录。我在一次在线测验中被问到这个问题,我知道这些类型的提交不会应用于业务中的实时场景。
    • 啊,测验。循环它,但您可以将“1000 行”条件放入source_table 子句中,以便每次循环迭代操作 1000 行。
    猜你喜欢
    • 2021-04-24
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多