Oracle-MergeInto合并

前言

merge into语句的功能:我们操作数据库的时候,有时候会遇到insert或者Update这种需求。我们操纵代码时至少需要写一个插入语句和更新语句并且还得单独写方法效验数据是否存在,这种操作完全可以用merge into语句代替,不仅省时省力而且条理更清晰,一个SQL语句直接完成插入,如果有相同主键进行更新操作。

用法

MERGE INTO后是更新的表,USING是对接口表进行筛选,(如果有重复数据,仅选取一行插入,用ORDER BY控制)。ON中是具体的条件(表中标识字段,字段编码)满足执行WHEN MATCHED THEN下的语句,不满足则执行WHEN NOT MATCHED THEN后语句。

MERGE INTO TableA A 
USING (
    (SELECT L.*, ROW_NUMBER() OVER(PARTITION BY T.FLEX_VALUE ORDER BY 1) AS RN
        FROM TABLEB L
    		WHERE T.BATCH_ID = #{batchId} ) L
    				AND L.RN = 1 )  B
ON ( A.FLEX_VALUE = B.FLEX_VALUE )
 		WHEN MATCHED THEN
  	UPDATE 
				A.FLEX_VALUE_SET_NAME = B.FLEX_VALUE_SET_NAME,
				A.VALIDATION_TYPE = B.VALIDATION_TYPE,
		WHEN NOT MATCHED THEN
  	INSERT (
    		A.FLEX_VALUE_SET_NAME = B.FLEX_VALUE_SET_NAME,
				A.VALIDATION_TYPE = B.VALIDATION_TYPE)