oracle merge into 的例子


內容來自 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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM