merge同时包含增、改、删

咱们都知道oracle merge能够用来增和改,不多用它来删除。可是有时候咱们仍然须要该特性,以提升性能,典型的场景就是将业务库逻辑删除的记录同步到查询库的时候,作真正的物理删除,这个时候merge的delete子句就再恰当不过了。以下所示:mysql

MERGE INTO A
USING (EMPLOYEE) B
ON (A.EMPLOYEEID = B.EMPLOYEEID AND A.YEAR = B.YEAR)
WHEN MATCHED THEN
UPDATE SET balance = b.balance
DELETE WHERE b.is_deleted = '1'

特别说明:
DELETE字句只能写在MATCHED状况中,不匹配时没法删除会报错。
当DELETE跟在UPDATE字句以后时,DELETE字句是针对UPDATE字句修改后的数据进行过滤的。好比须要删除全部C字段="1"的数据,UPDATE字句将全部数据的C字段都更新为1,那么会删除全部数据,而不是本来为1的数据。sql

可是在jdbc的addbatch上,彷佛merge的支持不像mysql那么直接,须要先insert临时表,而后merge,这样的效率最佳。oracle

相关文章
相关标签/搜索