MERGEINTO 目标表 USING 源表 ON (匹配条件) WHEN MATCHED THEN UPDATESET 列1= 值1, 列2= 值2, ... WHENNOT MATCHED THEN INSERT (列1, 列2, ...) VALUES (值1, 值2, ...);
说明:
目标表:需要更新或插入数据的表。
源表:提供数据的表。
匹配条件:用于确定目标表和源表中的匹配行。
WHEN MATCHED:如果匹配成功,则执行更新操作。
WHEN NOT MATCHED:如果匹配失败,则执行插入操作。
2. MERGE 语句的示例
(1)创建副本表
1 2 3 4 5 6 7 8
-- 创建副本表 myemp CREATETABLE myemp AS SELECT empno, ename, sal, deptno FROM tmp_emp WHERE empno IN (7369, 7499, 7521);
-- 查询 myemp 表 SELECT*FROM myemp;
(2)修改 myemp 表数据
1 2 3 4 5 6
-- 修改 myemp 表数据 UPDATE myemp SET ename ='hello'WHERE empno =7369; UPDATE myemp SET ename ='oracle'WHERE empno =7521;
-- 查询修改后的 myemp 表 SELECT*FROM myemp;
(3)使用 MERGE 同步数据
1 2 3 4 5 6 7 8 9 10 11
-- 使用 MERGE 同步数据 MERGEINTO myemp m USING tmp_emp t ON (m.empno = t.empno) WHEN MATCHED THEN UPDATESET m.ename = t.ename WHENNOT MATCHED THEN INSERT (empno, ename, sal, deptno) VALUES (t.empno, t.ename, t.sal, t.deptno);
-- 修改 myemp 表数据 UPDATE myemp SET sal =999WHERE ename ='SMITH';
-- 查询原始表 10 部门的数据 SELECT*FROM tmp_emp WHERE deptno =10;
-- 查询 myemp 表 SELECT*FROM myemp;
-- 使用 MERGE 同步数据(带条件) MERGEINTO myemp m USING tmp_emp t ON (m.empno = t.empno) WHEN MATCHED THEN UPDATESET m.sal = t.sal WHERE m.ename ='SMITH' WHENNOT MATCHED THEN INSERT (empno, ename, sal, deptno) VALUES (t.empno, t.ename, t.sal, t.deptno) WHERE t.deptno =10;
-- 修改目标表 KING 员工编号 UPDATE myemp SET empno =9999WHERE ename ='KING';
-- 修改目标表 SMITH 工资 UPDATE myemp SET sal =999WHERE ename ='SMITH';
-- 查询 myemp 表 SELECT*FROM myemp;
-- 使用 MERGE 同步数据(带删除条件) MERGEINTO myemp m USING tmp_emp t ON (m.empno = t.empno) WHEN MATCHED THEN UPDATESET m.sal = t.sal DELETEWHERE m.deptno =10 WHENNOT MATCHED THEN INSERT (empno, ename, sal, deptno) VALUES (t.empno, t.ename, t.sal, t.deptno) WHERE t.deptno IN (20, 30);