Oracle MERGE INTO语法探究
admin
2023-05-14 05:41:45
0次

1、MERGE INTO 的用途:
   MERGE INTO 是Oracle 9i新增的语法,在10g时得到补充,用来合并UPDATE和INSERT语句,根据一张表或子查询与另一张表进行连接查询,连接条件匹配就进行

UPDATE,不匹配就进行INSERT,这个语法仅需要一次全表扫描就可以完成全部工作,执行效率会比单纯的UPDATE+INSERT高,具体应用可用于表之间的同步。
2、MERGE INTO 的语法:
语法结构:
MERGE [INTO [schema .] table [t_alias]
USING [schema .] { table | view | subquery } [t_alias]
ON ( condition )
WHEN MATCHED THEN merge_update_clause
WHEN NOT MATCHED THEN merge_insert_clause;

语法说明:

MERGE INTO [表名] [别名]        --需要更新的目标表

USING ( 子查询/表名/视图)[别名] --源表

ON ([连接条件] AND [...]...)    --连接条件/更新条件

WHEN MATHED THEN UPDATE SET [...]  --如果匹配,更新表记录,若只作更新出来,下面的INSERT部分可以去掉

WHEN NOT MATHED THEN INSERT VALUES() [...]  --如果不匹配,插入表记录
3、MERGE INTO 演示:
  1> 创建测试表及数据:
     --以表YAG1作为源表,表YAG2作为更新的目标表
     CREATE TABLE YAG1 AS SELECT OBJECT_NAME,oOBJECT_ID FROM USER_OBJECTS WHERE ROWNUM<=10;
     CREATE TABLE YAG2 AS SELECT OBJECT_NAME,oOBJECT_ID FROM USER_OBJECTS WHERE ROWNUM<=5;
     --修改表YAG1中某条记录的OBJECT_NAME,创造符合UPDATE的条件,
     SQL> UPDATE YAG1 SET OBJECT_NAME='AAAAA' WHERE OBJECT_NAME='T_CAT';
  2>MERGE INTO 更新前两表的记录对比:
     SQL> SELECT A.OBJECT_ID,A.OBJECT_NAME,B.OBJECT_NAME FROM YAG1 A,YAG2 B WHERE A.OBJECT_ID=B.OBJECT_ID(+) ORDER BY 1;
A.OBJECT_ID      A.OBJECT_NAME        B.OBJECT_NAME
------------   ----------------   -----------------
46366            AAAAA              T_CAT
46367            SUM_STRING         SUM_STRING
46368            ARRAYLIST         ARRAYLIST
46369            TYSKZ_SJDX         TYSKZ_SJDX
46370            TYSKZ_SJXMGX         TYSKZ_SJXMGX

46371            PARAOBJECT 
46372            T_LINK 
46373            STR_SPLIT 
46374            SPLIT_TYPE 
46375            SYS_PLSQL_95487_9_1 
  3> 执行下面MERGE INTO 语句:
MERGE INTO YAG2 A
USING YAG1 B
ON (A.OBJECT_ID = B.OBJECT_ID)
WHEN MATCHED THEN
  UPDATE SET A.OBJECT_NAME = B.OBJECT_NAME
WHEN NOT MATCHED THEN
  INSERT VALUES (B.OBJECT_NAME, B.OBJECT_ID);
COMMIT; 
  4> MERGE INTO 更新后两表的记录对比:
     SQL> SELECT A.OBJECT_ID,A.OBJECT_NAME,B.OBJECT_NAME FROM YAG1 A,YAG2 B WHERE A.OBJECT_ID=B.OBJECT_ID(+) ORDER BY 1;
A.OBJECT_ID      A.OBJECT_NAME        B.OBJECT_NAME
------------   ----------------   -----------------
46366            AAAAA              AAAAA
46367            SUM_STRING         SUM_STRING
46368            ARRAYLIST           ARRAYLIST
46369            TYSKZ_SJDX         TYSKZ_SJDX
46370            TYSKZ_SJXMGX         TYSKZ_SJXMGX
46371            PARAOBJECT         PARAOBJECT
46372            T_LINK               T_LINK
46373            STR_SPLIT         STR_SPLIT
46374            SPLIT_TYPE         SPLIT_TYPE
46375            SYS_PLSQL_95487_9_1 SYS_PLSQL_95487_9_1
.

 

 

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...