成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Oracle基礎教程之Merge into

數據庫 Oracle
Merge into語句是Oracle9i新增的語法,用來合并UPDATE和INSERT語句。通過MERGE語句,根據一張表或多表聯合查詢的連接條件對另外一張表進行查詢,連接條件匹配上的進行UPDATE,無法匹配的執行INSERT。

[[197117]]

Merge into語句是Oracle9i新增的語法,用來合并UPDATE和INSERT語句。

通過MERGE語句,根據一張表或多表聯合查詢的連接條件對另外一張表進行查詢,連接條件匹配上的進行UPDATE,無法匹配的執行INSERT。

這個語法僅需要一次全表掃描就完成了全部工作,執行效率要高于INSERT+UPDATE。通過這個MERGE你能夠在一個SQL語句中對一個表同時執行INSERT和UPDATE操作. 在 Oracle 10g中MERGE有一些新特性,后面我會介紹這些新特征。先看看MERGE語法如下:

  1. MERGE INTO TEST_NEW DM USING                     
  2. (                                                               
  3.         SELECT DATE_CD,                                         
  4.               HR_CD,                                           
  5.               DATE_HR, 
  6.               DECODE(GROUPING(CITY_ID), 1, 9999, CITY_ID) AS CITY_ID, 
  7.               DECODE(GROUPING(SYSTEM_ID), 1, -9999, SYSTEM_ID) AS SYSTEM_ID, 
  8.               SUM(GSM_REG_USERCNT) AS GSM_REG_USERCNT, 
  9.               SUM(TD_REG_USERCNT) AS TD_REG_USERCNT, 
  10.               SUM(TD_REG_USERRAT) AS TD_REG_USERRAT, 
  11.               SUM(GSM_POWERON_USERCNT) AS GSM_POWERON_USERCNT, 
  12.               SUM(TD_POWERON_USERCNT) AS TD_POWERON_USERCNT, 
  13.               SUM(TD_POWERON_USERRAT) AS TD_POWERON_USERRAT 
  14.         FROM  TEST_OLD 
  15.         GROUP BY DATE_HR, DATE_CD, HR_CD, ROLLUP(SYSTEM_ID),ROLLUP(CITY_ID) 
  16. ) TMP 
  17. ON 
  18.                 DM.DATE_CD  = TMP.DATE_CD  
  19.             AND DM.HR_CD    = TMP.HR_CD  
  20.             AND DM.CITY_ID  = TMP.CITY_ID  
  21.             AND DM.SYSTEM_ID = TMP.SYSTEM_ID 
  22. WHEN MATCHED THEN  UPDATE  SET 
  23.       DM.GSM_REG_USERCNT = TMP.GSM_REG_USERCNT, 
  24.       DM.TD_REG_USERCNT = TMP.TD_REG_USERCNT, 
  25.       DM.TD_REG_USERRAT = TMP.TD_REG_USERRAT, 
  26.       DM.GSM_POWERON_USERCNT  = TMP.GSM_POWERON_USERCNT, 
  27.       DM.TD_POWERON_USERCNT = TMP.TD_POWERON_USERCNT, 
  28.       DM.TD_POWERON_USERRAT = TMP.TD_POWERON_USERRAT, 
  29.       DM.DATE_HR = TMP.DATE_HR 
  30. WHEN NOT MATCHED THEN   
  31. INSERT 
  32.       DM.DATE_CD, 
  33.       DM.HR_CD, 
  34.       DM.DATE_HR, 
  35.       DM.CITY_ID, 
  36.       DM.SYSTEM_ID, 
  37.       DM.GSM_REG_USERCNT, 
  38.       DM.TD_REG_USERCNT, 
  39.       DM.TD_REG_USERRAT, 
  40.       DM.GSM_POWERON_USERCNT, 
  41.       DM.TD_POWERON_USERCNT, 
  42.       DM.TD_POWERON_USERRAT 
  43. VALUES 
  44. (  
  45.       TMP.DATE_CD, 
  46.       TMP.HR_CD, 
  47.       TMP.DATE_HR, 
  48.       TMP.CITY_ID, 
  49.       TMP.SYSTEM_ID, 
  50.       TMP.GSM_REG_USERCNT, 
  51.       TMP.TD_REG_USERCNT, 
  52.       TMP.TD_REG_USERRAT, 
  53.       TMP.GSM_POWERON_USERCNT, 
  54.       TMP.TD_POWERON_USERCNT, 
  55.       TMP.TD_POWERON_USERRAT); 

WHEN MATCHED THEN UPDATE SET 表示當on里面的關鍵字匹配上的時候,就進行修改操作。

但是值得注意的是,在做修改操作的時候,不可以修改on里面關鍵字的值。

WHEN NOT MATCHED THEN INSERT 表示當on里面的關鍵字匹配不上的時候,也就是說沒有這樣一條記錄存在TEST_NEW表中時,就進行新增操作。

這時,做新增操作,就可以將on里面的字段進行設置值。

在ORACLE 10i中,MERGE有如下一些新特性。

1、UPDATE或INSERT子句是可選的

假如某個系統中,有個訂單表,現在要求新增訂單的記錄都要反應到訂單歷史表ORDER_HISTORY中,我們可以如下寫腳本:

  1. MERGE INTO ORDER_HISTORY H USING 
  2.       SELECT ORDER_ID              ,--訂單編號 
  3.             CUSTOMER_ID            ,--客戶編號 
  4.             EMPLOYEE_ID            ,--員工編號 
  5.             ORDER_DATE            ,--訂購日期; 
  6.             REQUIRED_DATE          ,--預計到達日期 
  7.             SHIPPED_DATE          ,--發貨日期 
  8.             SHIPPER                ,--運貨商 
  9.             FREIGHT                ,--運費 
  10.             SHIP_NAM              ,--貨主姓名; 
  11.             SHIP_ADDRESS          ,--貨主地址 
  12.             SHIP_CITY              ,--貨主所在城市; 
  13.             SHIP_REGION            ,--貨主所在地區; 
  14.             SHIP_POSTALCODE        ,--貨主郵編 
  15.             SHIP_COUNTRY            --貨主所在國家 
  16.       FROM  ORDER_DTL 
  17.       WHERE TO_CHAR(ODER_DATE, 'YYYY-MM-DD') = '20110530' 
  18. ) O 
  19. ON 
  20.             O.ORDER_ID = H.ORDER_ID 
  21. )   
  22. WHEN NOT MATCHED THEN INSERT 
  23.             H.ORDER_ID              , 
  24.             H.CUSTOMER_ID            , 
  25.             H.EMPLOYEE_ID            , 
  26.             H.ORDER_DATE            , 
  27.             H.REQUIRED_DATE          , 
  28.             H.SHIPPED_DATE          , 
  29.             H.SHIPPER                , 
  30.             H.FREIGHT                , 
  31.             H.SHIP_NAM              , 
  32.             H.SHIP_ADDRESS          , 
  33.             H.SHIP_CITY              , 
  34.             H.SHIP_REGION            , 
  35.             H.SHIP_POSTALCODE        , 
  36.             H.SHIP_COUNTRY           
  37. VALUES 
  38. (           
  39.             O.ORDER_ID                , 
  40.             O.CUSTOMER_ID            , 
  41.             O.EMPLOYEE_ID            , 
  42.             O.ORDER_DATE              , 
  43.             O.REQUIRED_DATE          , 
  44.             O.SHIPPED_DATE            , 
  45.             O.SHIPPER                , 
  46.             O.FREIGHT                , 
  47.             O.SHIP_NAM                , 
  48.             O.SHIP_ADDRESS            , 
  49.             O.SHIP_CITY              , 
  50.             O.SHIP_REGION            , 
  51.             O.SHIP_POSTALCODE        , 
  52.             O.SHIP_COUNTRY<br>); 

從上可以看出,MATCHED 或NOT MATCHED是可選的。不必非得

  1. WHEN NOT MATCHED THEN UPDATE SET 
  2.   ..... 
  3.   WHEN MATCHED THEN INSERT 

2、UPDATE和INSERT子句可以加WHERE子句

現在由于需求改變,我們僅僅需要把員工1001的訂單數據同步到訂單歷史記錄表

  1. MERGE INTO ORDER_HISTORY H USING 
  2.       SELECT ORDER_ID              ,--訂單編號 
  3.             CUSTOMER_ID            ,--客戶編號 
  4.             EMPLOYEE_ID            ,--員工編號 
  5.             ORDER_DATE            ,--訂購日期; 
  6.             REQUIRED_DATE          ,--預計到達日期 
  7.             SHIPPED_DATE          ,--發貨日期 
  8.             SHIPPER                ,--運貨商 
  9.             FREIGHT                ,--運費 
  10.             SHIP_NAM              ,--貨主姓名; 
  11.             SHIP_ADDRESS          ,--貨主地址 
  12.             SHIP_CITY              ,--貨主所在城市; 
  13.             SHIP_REGION            ,--貨主所在地區; 
  14.             SHIP_POSTALCODE        ,--貨主郵編 
  15.             SHIP_COUNTRY            --貨主所在國家 
  16.       FROM  ORDER_DTL 
  17. ) O 
  18. ON 
  19.             O.ORDER_ID = H.ORDER_ID 
  20. WHEN MATCHED THEN UPDATE    SET             
  21.             H.CUSTOMER_ID        =    O.CUSTOMER_ID      , 
  22.             H.EMPLOYEE_ID        =    O.EMPLOYEE_ID      , 
  23.             H.ORDER_DATE          =    O.ORDER_DATE        , 
  24.             H.REQUIRED_DATE      =    O.REQUIRED_DATE    , 
  25.             H.SHIPPED_DATE        =    O.SHIPPED_DATE      , 
  26.             H.SHIPPER            =    O.SHIPPER          , 
  27.             H.FREIGHT            =    O.FREIGHT          , 
  28.             H.SHIP_NAM            =    O.SHIP_NAM          , 
  29.             H.SHIP_ADDRESS        =    O.SHIP_ADDRESS      , 
  30.             H.SHIP_CITY          =    O.SHIP_CITY        , 
  31.             H.SHIP_REGION        =    O.SHIP_REGION      , 
  32.             H.SHIP_POSTALCODE    =    O.SHIP_POSTALCODE  , 
  33.             H.SHIP_COUNTRY        =    O.SHIP_COUNTRY       
  34.       WHERE O.EMPLOYEE_ID = '1001' 
  35. WHEN NOT MATCHED THEN INSERT 
  36.             H.ORDER_ID              , 
  37.             H.CUSTOMER_ID            , 
  38.             H.EMPLOYEE_ID            , 
  39.             H.ORDER_DATE            , 
  40.             H.REQUIRED_DATE          , 
  41.             H.SHIPPED_DATE          , 
  42.             H.SHIPPER                , 
  43.             H.FREIGHT                , 
  44.             H.SHIP_NAM              , 
  45.             H.SHIP_ADDRESS          , 
  46.             H.SHIP_CITY              , 
  47.             H.SHIP_REGION            , 
  48.             H.SHIP_POSTALCODE        , 
  49.             H.SHIP_COUNTRY           
  50. VALUES 
  51. (           
  52.             O.ORDER_ID                , 
  53.             O.CUSTOMER_ID            , 
  54.             O.EMPLOYEE_ID            , 
  55.             O.ORDER_DATE              , 
  56.             O.REQUIRED_DATE          , 
  57.             O.SHIPPED_DATE            , 
  58.             O.SHIPPER                , 
  59.             O.FREIGHT                , 
  60.             O.SHIP_NAM                , 
  61.             O.SHIP_ADDRESS            , 
  62.             O.SHIP_CITY              , 
  63.             O.SHIP_REGION            , 
  64.             O.SHIP_POSTALCODE        , 
  65.             O.SHIP_COUNTRY             
  66. )  WHERE O.EMPLOYEE_ID = '1001'; 
責任編輯:武曉燕 來源: Linux社區
相關推薦

2016-08-31 14:01:31

MySQL存儲數據庫

2009-07-24 09:20:15

數組實例

2009-06-22 09:23:18

事件監聽器

2011-04-15 09:20:56

ASP.NET MVC

2009-07-24 10:09:08

ASP.NET個性化ASP.NET基礎教程

2010-06-11 13:53:54

UML建模

2021-07-16 07:21:45

C++可調用對象std::functi

2009-10-21 17:36:36

VB基礎教程

2017-12-12 07:47:59

dockermarathon服務器

2021-02-06 07:49:48

C語言編程開發技術

2011-07-07 13:58:13

Windows 200活動目錄

2009-10-26 09:04:35

VB.NET數據庫基礎

2011-07-18 09:35:29

iPhone 框架

2009-07-22 13:32:43

iBATIS DAO

2011-09-13 16:39:50

Android UI設

2011-07-21 10:17:53

java

2011-07-15 14:19:10

故障恢復控制臺

2009-09-17 10:45:03

CCNA基礎教程CCNA

2010-07-23 12:23:49

Perl基礎

2020-04-09 14:02:33

NginxHttps前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 美女三区 | 国产午夜精品福利 | 日韩久久网 | 欧美精品第一页 | 亚洲日韩中文字幕一区 | 国产一二区在线 | 久久久久久av | 日本三级在线网站 | a级片在线 | 在线观看中文字幕av | 成人av在线播放 | 国产精品视频999 | 国产精品资源在线 | 久久久性色精品国产免费观看 | 视频二区国产 | 成年人在线观看 | 欧美大片一区 | 一级毛片免费视频 | 亚洲乱码国产乱码精品精的特点 | 在线看一区二区 | 国产精品久久久99 | 羞羞的视频在线看 | 亚洲精品一区中文字幕乱码 | 国产主播第一页 | 国产精品视频久久久久久 | 特一级黄色毛片 | 国产一区在线免费观看 | 日韩三级 | av中文字幕在线播放 | 在线一区二区观看 | 一级黄色录像片子 | 日本小电影在线 | 小h片免费观看久久久久 | 国产精品毛片久久久久久 | 国产小视频在线看 | 欧美日韩亚洲三区 | 欧美一区二区三区国产 | 91日韩在线 | 国产激情视频网站 | 日韩国产免费观看 | 精品视频在线观看 |