码迷,mamicode.com
首页 > 数据库 > 详细

oracle merge into 的例子

时间:2016-07-24 01:46:58      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:

内容来自 oracle 11g 实用教程 郑阿奇等编

在 oracle 11g中有merge语句,用于根据与原表连接的结果,对目标表执行插入,更新,或者删除操作。例如,根据在一个表中找到的差异在另一个表中插入,更新或者删除行,这种方法可以对两个表进行信息同步。语法格式如下

merge into <目标表名>

using <原表名>on <条件表达式>

when matched then {update set ...|delete}

when not matched then insert(...) values()

 

 merge into a
 using xsb on (a.xh=xsb.学号)
 when matched then update set a.xm = xsb.姓名,a.xb=xsb.性别,a.cssj = xsb.出生时间,a.zy=xsb.专业,a.zxf=xsb.总学分,a.bz=xsb.备注
 when not matched then insert values(xsb.学号,xsb.姓名,xsb.性别,xsb.出生时间,xsb.专业,xsb.总学分,xsb.备注)
 

数据库

 create table a
(
 XH char(6) not null primary key,
 xM char(8) not null,
 XB char(2) not null,
 CSSJ date not null,
 ZY char(24) null,
 ZXF number(2) null,
 BZ varchar(200) null
 );

 

--------------------------------------------------------
--  文件已创建 - 星期日-七月-24-2016   
--------------------------------------------------------
--------------------------------------------------------
--  DDL for Table XSB
--------------------------------------------------------

  CREATE TABLE "SCOTT"."XSB" 
   (    "学号" CHAR(6 BYTE), 
    "姓名" CHAR(8 BYTE), 
    "性别" CHAR(2 BYTE) DEFAULT , 
    "出生时间" DATE, 
    "专业" CHAR(12 BYTE), 
    "总学分" NUMBER(2,0), 
    "备注" VARCHAR2(200 BYTE)
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" ;
REM INSERTING into SCOTT.XSB
SET DEFINE OFF;
Insert into SCOTT.XSB (学号,姓名,性别,出生时间,专业,总学分,备注) values (151114,周何骏  ,,to_date(25-9月 -98,DD-MON-RR),计算机      ,90,null);
Insert into SCOTT.XSB (学号,姓名,性别,出生时间,专业,总学分,备注) values (151101,王林    ,,to_date(02-10月-97,DD-MON-RR),计算机      ,50,null);
Insert into SCOTT.XSB (学号,姓名,性别,出生时间,专业,总学分,备注) values (151103,王燕    ,,to_date(10-6月 -96,DD-MON-RR),计算机      ,50,null);
Insert into SCOTT.XSB (学号,姓名,性别,出生时间,专业,总学分,备注) values (151202,王林    ,,to_date(29-1月 -96,DD-MON-RR),通信工程    ,40,有一门课不及格,待补考);
Insert into SCOTT.XSB (学号,姓名,性别,出生时间,专业,总学分,备注) values (151108,林一帆  ,,to_date(08-5月 -96,DD-MON-RR),计算机      ,52,已提前修完一门课);
Insert into SCOTT.XSB (学号,姓名,性别,出生时间,专业,总学分,备注) values (151204,马琳琳  ,,to_date(02-10月-96,DD-MON-RR),通信工程    ,42,null);
--------------------------------------------------------
--  DDL for Index SYS_C0011202
--------------------------------------------------------

  CREATE UNIQUE INDEX "SCOTT"."SYS_C0011202" ON "SCOTT"."XSB" ("学号") 
  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" ;
--------------------------------------------------------
--  Constraints for Table XSB
--------------------------------------------------------

  ALTER TABLE "SCOTT"."XSB" MODIFY ("学号" NOT NULL ENABLE);
 
  ALTER TABLE "SCOTT"."XSB" MODIFY ("姓名" NOT NULL ENABLE);
 
  ALTER TABLE "SCOTT"."XSB" MODIFY ("性别" NOT NULL ENABLE);
 
  ALTER TABLE "SCOTT"."XSB" MODIFY ("出生时间" NOT NULL ENABLE);
 
  ALTER TABLE "SCOTT"."XSB" ADD PRIMARY KEY ("学号")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"  ENABLE;

 

oracle merge into 的例子

标签:

原文地址:http://www.cnblogs.com/rocky-AGE-24/p/5699949.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!