ORACLE 10 g的 merge into 用法

在Oracle 10g之前,merge语句支持匹配更新和不匹配插入2种简单的用法,在10g中Oracle对merge语句做了增强,增加了条件选项和DELETE操作。下面我通过一个demo来简单介绍一下10g中merge的增强和10g前merge的用法。

 

参考Oracle 的SQL Reference 下面我在一下环境中做一个测试看看

创建表subs  和 acct

create table subs(
       msid     number(9),
       ms_type  char(1),
       areacode number(3)
);

create table acct(
       msid       number(9),
       bill_month number(6),
       areacode   number(3),
       fee        number(8,2) default 0.00
);

插入数据

insert into subs values(905310001,0,531);
insert into subs values(905320001,1,532);
insert into subs values(905330001,2,533);
commit
语法
--  语法
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;

测试

---  matched:更新    not matched:插入  两者可以同步执行也可以只要一个条件
merge into acct a
   using subs b
      on (a.msid = b.msid)
         when matched then
            update set a.areacode = 22
         when not matched then
            insert (msid, bill_month, areacode) values (b.msid, '200702', b.areacode);
commit

增强条件查询操作

merge into acct a
   using subs b
      on (a.msid = b.msid)
         when matched then
            update set a.areacode = 22 where b.ms_type = 0
         when not matched then
            insert (msid, bill_month, areacode) values (b.msid, '200702', b.areacode) where b.ms_type = 0;
commit

增强删除操作

merge into acct a
   using subs b
      on (a.msid = b.msid)
         when matched then
            update set a.areacode = 22
            delete where (b.ms_type != 0);
commit
时间: 2024-11-08 06:25:26

ORACLE 10 g的 merge into 用法的相关文章

Oracle中Merge into用法总结 (转载)

Oracle中Merge into用法总结 (出处:http://www.cnblogs.com/dongsheng/p/4384754.html) 起因: 前段时间,因为涉及到一张表的大数据操作,要同时进行增删改,我跟师傅想了很多优化办法,结果都不尽人意.刚开始用的就是原始算法,先更新现有记录,再插入满足要求的其他记录,最后再删除多余记录,但是少量数据还可以,10W条数据就不行了,前台的超时时间是60s,远远无法满足要求.之后又想办法将任务进行拆分,根据每条记录流水号尾字符不同进行拆分,用多个

oracle merge into用法

Oracle 10g中MERGE有如下一些改进: 1.UPDATE或INSERT子句是可选的 2.UPDATE和INSERT子句可以加WHERE子句 3.ON条件中使用常量过滤谓词来insert所有的行到目标表中,不需要连接源表和目标表 4.UPDATE子句后面可以跟DELETE子句来去除一些不需要的行 Oracle9i引入了MERGE命令,你能够在一个SQL语句中对一个表同时执行inserts和updates操作. MERGE命令从一个或多个数据源中选择行来updating或inserting

Oracle中HINT的30个用法

在SQL语句优化过程中,经常会用到hint, 以下是在SQL优化过程中常见Oracle中"HINT"的30个用法 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT'; 2. /*+FIRST_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消

RAC分解步骤之一,在oracle linux 4u4上安装oracle 10.2.0.1.0操作日志

练习oracle的rac组建过程,第一步,先练习4u4上安装oracle 10.2.0.1.0.直接安装rac,有些难度.从简单的做起.总RAC步骤,参照小布老师的RAC组建. 1. 启动vc,登陆vsphere 5.1 , 2. 新建一个虚拟机,Redhat 4 32bit 兼容的虚拟机,内存1G,硬盘30G.移除软驱,把光驱选择为ISO镜像文件. 3. 启动虚拟机,选择英文,选择美式键盘,选择custom,选择自己手动分区.分区为2个,一个swap,2100M,强制主分区,另一个为ext3,

Oracle Linux 5.8安装Oracle 10.2.0.5 x64

一.正常方式全新安装 1. oracle安装环境准备 (1) 确认安装以下包 # rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE}  (%{ARCH})\n' binutils compat-libstdc++-33 compat-gcc-34-c++ elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-d

SQL2008中Merge的用法

在SQL2008中,新增了一个关键字:Merge,这个和Oracle的Merge的用法差不多,只是新增了一个delete方法而已.下面就是具体的使用说明: 首先是对merge的使用说明: merge [into] [目标表]using <源表>on 条件when matched 操作 when not matched 操作; 首先,请参看两张表 TableThis和TableThat: 可以看到,这两张表中的内容还是比较简单的,两张表通过一个tbThisID进行主键和外键的关联,那么如如果想实

SQL2008中Merge的用法(轉載)

在SQL2008中,新增了一个关键字:Merge,这个和Oracle的Merge的用法差不多,只是新增了一个delete方法而已.下面就是具体的使用说明: 首先是对merge的使用说明: merge [into] [目标表]using <源表>on 条件when matched 操作 when not matched 操作; 首先,请参看两张表 TableThis和TableThat: 可以看到,这两张表中的内容还是比较简单的,两张表通过一个tbThisID进行主键和外键的关联,那么如如果想实

Oracle 11 g duplicate功能_复制dataguard备库

Qracle 11g duplicate功能 不用备份源库,通过网络复制出standby库 1.在standby上grid用户配置listener 注意是指定oracle用户的家目录: 监听状态: [[email protected] ~]$lsnrctl LSNRCTL for Linux:Version 11.2.0.4.0 - Production on 19-MAY-2014 18:46:15 Copyright (c)1991, 2013, Oracle.  All rights re

SQL2008中Merge的用法(转)

在SQL2008中,新增了一个关键字:Merge,这个和Oracle的Merge的用法差不多,只是新增了一个delete方法而已.下面就是具体的使用说明: 首先是对merge的使用说明: merge [into] [目标表]using <源表>on 条件when matched 操作 when not matched 操作; 可以看到,这两张表中的内容还是比较简单的,两张表通过一个tbThisID进行主键和外键的关联,那么如如果想实现二者之间的数据同步,该如何进行呢,请看具体的Merge代码: