如何创建UPSERT命令?

时间:2018-11-12 19:32:09

标签: oracle

我想用另一个关键字替换一个脚本中所有INSERT实例,这些关键字将更新数据而不是插入数据。通过mySQL,我可以使用UPSERT或REPLACE。但是对于Oracle,我不能使用MERGE,因为MERGE语法更加复杂,所以我不能只更改一个关键字。有什么主意吗?+

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
-- would become :
UPSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

2 个答案:

答案 0 :(得分:1)

恐怕您无法做到这一点,即仅用INSERT搜索/替换MERGE并期望它能正常工作。不会,因为语法将是错误的。正如您已经注意到的,MERGE比纯INSERT和/或UPDATE更复杂,所以……您真不走运。

但是,如果您愿意编写更多代码(完全重写您目前拥有的INSERT s),那可以,但是需要一些努力。

答案 1 :(得分:0)

IF 都引用同一张表,并且列名都以相同的顺序排列,因此您可以将其更改为调用存储过程,从而摆脱困境

  

call upsert_proc(value1,value2,value3,...);

您必须对该过程进行编码以进行合并,或者使用异常处理程序进行插入以进行更新。