本站不再更新,歡迎光臨 java開發技術網
          隨筆-230  評論-230  文章-8  trackbacks-0

          Oracle9i引入了一個新的SQL語句,使用本語句可以在一條語句中連接兩個表。
          以前要使用UPDATE去更新兩個表中都存在的記錄,或者用INSERT添加兩個合并表中不存在的記錄,必須寫兩個SQL語句,
          而現在這兩種操作都只要一條SQL MERGE語句就可以實現。

           

          create table inventory (part_nointeger integer,part_count integer); 

          insert into inventory values(1,5);

          insert into inventory values(3,6); 


          create table shipment (part_nointeger integer,part_count integer);

          insert into shipment values(1,2);
          insert into shipment values(2,2);

          MERGE 
          INTO inventory
              USING shipment
              
          ON (inventory.part_nointeger=shipment.part_nointeger)
          WHEN MATCHED THEN
             
          UPDATE SET inventory.part_count=inventory.part_count+shipment.part_count  --注意如果這里前面的part_count字段不指明表名,默認為shipment字段,結果會為4
          WHEN NOT MATCHED THEN
             
          INSERT VALUES (shipment.part_nointeger,shipment.part_count);

          commit;
          select * from inventory;
             
          truncate table inventory;     
          /*
            PART_NO   PART_COUNT
          ----------              ----------
                1                      7
                3                      6
                2                      2 

           

          執行的結果是shipment數據已經被合并到inventory中,所以與inventory中某些東西相匹配的shipment都會被添加到count中,
          而沒有得到的匹配的就不會添加到inventory中。

           

          在MERGE語句中必須指定一個WHEN MATCHED和一個WHEN NOT MATHCED語句。
          如果除這兩種情況之外還有別的情況,你可能就需要使用一個常規的INSERT或者UPDATE語句。

           

          另外一點是MERGE語句一次只能修改一行記錄,而且不能修改在ON子句中引用的列。

           

          MERGE語句的目標表(target table)(在本例中是inventory)必須是一個可以使用INSERT語句進行插入或者UPDATE語句進行更新的表或者視圖。
          源表(source table)(在本例中是shipment)可以是任何的查詢表,比如說外部表或者管道化表函數。

          posted on 2008-06-12 10:59 有貓相伴的日子 閱讀(1670) 評論(0)  編輯  收藏 所屬分類: pl/sql
          本站不再更新,歡迎光臨 java開發技術網
          主站蜘蛛池模板: 涟水县| 曲周县| 天全县| 宽甸| 正安县| 望都县| 册亨县| 霍林郭勒市| 哈巴河县| 广安市| 合水县| 高邑县| 景德镇市| 化州市| 驻马店市| 石林| 万宁市| 武定县| 灌阳县| 兴仁县| 宁阳县| 靖州| 洛宁县| 故城县| 申扎县| 金山区| 甘孜县| 宝山区| 凯里市| 房产| 炎陵县| 南和县| 襄樊市| 尼木县| 抚宁县| 科技| 太原市| 涞源县| 通渭县| 赤水市| 会同县|