如何在 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 语句中使用提交?的主要内容,如果未能解决你的问题,请参考以下文章