你好,游客 登录 注册 搜索
背景:
阅读新闻

Oracle MERGE INTO语法探究

[日期:2014-07-25] 来源:Linux社区  作者:qytag [字体: ]

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

Linux-6-64下安装Oracle 12C笔记 http://www.linuxidc.com/Linux/2013-07/86805.htm

RHEL6.4_64安装单实例Oracle 12cR1 http://www.linuxidc.com/Linux/2013-08/88510.htm

Oracle 12C新特性之翻页查询 http://www.linuxidc.com/Linux/2012-10/72611.htm

解读 Oracle 12C 的 12 个新特性 http://www.linuxidc.com/Linux/2012-10/72083.htm

更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址http://www.linuxidc.com/Linux/2014-07/104695.htm

linux
相关资讯       Oracle MERGE INTO  MERGE INTO语法 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款