日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Oracle中的MERGE语句

發(fā)布時(shí)間:2023/11/27 生活经验 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle中的MERGE语句 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
轉(zhuǎn)自http://blog.chinaunix.net/space.php?uid=16981447&do=blog&cuid=430716做了簡單的格式整理,加入了一點(diǎn)點(diǎn)原創(chuàng)的東西。Oracle9i引入了MERGE命令,你能夠在一個(gè)SQL語句中對一個(gè)表同時(shí)執(zhí)行inserts和updates操作. MERGE命令從一個(gè)或多個(gè)數(shù)據(jù)源中選擇行來updating或inserting到一個(gè)或多個(gè)表.在Oracle 10g中MERGE有如下一些改進(jìn):?

1、UPDATE或INSERT子句是可選的?
2、UPDATE和INSERT子句可以加WHERE子句?
3、在ON條件中使用常量過濾謂詞來insert所有的行到目標(biāo)表中,不需要連接源表和目標(biāo)表?(可以using dual)
4、UPDATE子句后面可以跟DELETE子句來去除一些不需要的行?


首先創(chuàng)建示例表:?
create table PRODUCTS
??? (
??? PRODUCT_ID INTEGER,
??? PRODUCT_NAME VARCHAR2(60),
??? CATEGORY VARCHAR2(60)
??? );

??? insert into PRODUCTS values (1501, 'VIVITAR 35MM', 'ELECTRNCS');
??? insert into PRODUCTS values (1502, 'OLYMPUS IS50', 'ELECTRNCS');
??? insert into PRODUCTS values (1600, 'PLAY GYM', 'TOYS');
??? insert into PRODUCTS values (1601, 'LAMAZE', 'TOYS');
??? insert into PRODUCTS values (1666, 'HARRY POTTER', 'DVD');
??? commit;

??? create table NEWPRODUCTS
??? (
??? PRODUCT_ID INTEGER,
??? PRODUCT_NAME VARCHAR2(60),
??? CATEGORY VARCHAR2(60)
??? );

??? insert into NEWPRODUCTS values (1502, 'OLYMPUS CAMERA', 'ELECTRNCS');
??? insert into NEWPRODUCTS values (1601, 'LAMAZE', 'TOYS');
??? insert into NEWPRODUCTS values (1666, 'HARRY POTTER', 'TOYS');
??? insert into NEWPRODUCTS values (1700, 'WAIT INTERFACE', 'BOOKS');
??? commit;?

1、可省略的UPDATE或INSERT子句?

在Oracle 9i, MERGE語句要求你必須同時(shí)指定INSERT和UPDATE子句.而在Oracle 10g, 你可以省略UPDATE或INSERT子句中的一個(gè). 下面的例子根據(jù)表NEWPRODUCTS的PRODUCT_ID字段是否匹配來updates表PRODUCTS的信息:

SQL> MERGE INTO products p
??? 2 USING newproducts np
??? 3 ON (p.product_id = np.product_id)
??? 4 WHEN MATCHED THEN
??? 5 UPDATE
??? 6 SET p.product_name = np.product_name,
??? 7 p.category = np.category;

??? 3 rows merged.

??? SQL> SELECT * FROM products;

??? PRODUCT_ID PRODUCT_NAME CATEGORY
??? ---------- -------------------- ----------
??? 1501 VIVITAR 35MM ELECTRNCS
??? 1502 OLYMPUS CAMERA ELECTRNCS
??? 1600 PLAY GYM TOYS
??? 1601 LAMAZE TOYS
??? 1666 HARRY POTTER TOYS
??? SQL>
??? SQL> ROLLBACK;
??? Rollback complete.
??? SQL>?


在上面例子中, MERGE語句影響到是產(chǎn)品id為1502, 1601和1666的行. 它們的產(chǎn)品名字和種 類被更新為表newproducts中的值. 下面例子省略UPDATE子句, 把表NEWPRODUCTS中新的PRODUCT_ID插入到表PRODUCTS中, 對于在兩個(gè)表中能夠匹配上PRODUCT_ID的數(shù)據(jù)不作任何處理. 從這個(gè)例子你能看到PRODUCT_ID=1700的行被插入到表PRODUCTS中.?


SQL> MERGE INTO products p
??? 2 USING newproducts np
??? 3 ON (p.product_id = np.product_id)
??? 4 WHEN NOT MATCHED THEN
??? 5 INSERT
??? 6 VALUES (np.product_id, np.product_name,
??? 7 np.category);

??? 1 row merged.

??? SQL> SELECT * FROM products;

??? PRODUCT_ID PRODUCT_NAME CATEGORY
??? ---------- -------------------- ----------
??? 1501 VIVITAR 35MM ELECTRNCS
??? 1502 OLYMPUS IS50 ELECTRNCS
??? 1600 PLAY GYM TOYS
??? 1601 LAMAZE TOYS
??? 1666 HARRY POTTER DVD
??? 1700 WAIT INTERFACE BOOKS?

2、帶條件的Updates和Inserts子句?

你能夠添加WHERE子句到UPDATE或INSERT子句中去, 來跳過update或insert操作對某些行的處理. 下面例子根據(jù)表NEWPRODUCTS來更新表PRODUCTS數(shù)據(jù), 但必須字段CATEGORY也得同時(shí)匹配上:?

SQL> MERGE INTO products p
??? 2 USING newproducts np
??? 3 ON (p.product_id = np.product_id)
??? 4 WHEN MATCHED THEN
??? 5 UPDATE
??? 6 SET p.product_name = np.product_name
??? 7 WHERE p.category = np.category;

??? 2 rows merged.

??? SQL> SELECT * FROM products;

??? PRODUCT_ID PRODUCT_NAME CATEGORY
??? ---------- -------------------- ----------
??? 1501 VIVITAR 35MM ELECTRNCS
??? 1502 OLYMPUS CAMERA ELECTRNCS
??? 1600 PLAY GYM TOYS
??? 1601 LAMAZE TOYS
??? 1666 HARRY POTTER DVD
??? SQL>
??? SQL> rollback;?

在這個(gè)例子中, 產(chǎn)品ID為1502,1601和1666匹配ON條件但是1666的category不匹配. 因此MERGE命令只更新兩行數(shù)據(jù). 下面例子展示了在Updates和Inserts子句都使用WHERE子句:?


SQL> MERGE INTO products p
??? 2 USING newproducts np
??? 3 ON (p.product_id = np.product_id)
??? 4 WHEN MATCHED THEN
??? 5 UPDATE
??? 6 SET p.product_name = np.product_name,
??? 7 p.category = np.category
??? 8 WHERE p.category = 'DVD'
??? 9 WHEN NOT MATCHED THEN
??? 10 INSERT
??? 11 VALUES (np.product_id, np.product_name, np.category)
??? 12 WHERE np.category != 'BOOKS'
??? SQL> /

??? 1 row merged.

??? SQL> SELECT * FROM products;

??? PRODUCT_ID PRODUCT_NAME CATEGORY
??? ---------- -------------------- ----------
??? 1501 VIVITAR 35MM ELECTRNCS
??? 1502 OLYMPUS IS50 ELECTRNCS
??? 1600 PLAY GYM TOYS
??? 1601 LAMAZE TOYS
??? 1666 HARRY POTTER TOYS

??? SQL>?


注意由于有WHERE子句INSERT沒有插入所有不匹配ON條件的行到表PRODUCTS.?

3、無條件的Inserts?

你能夠不用連接源表和目標(biāo)表就把源表的數(shù)據(jù)插入到目標(biāo)表中. 這對于你想插入所有行到目標(biāo)表時(shí)是非常有用的. Oracle 10g現(xiàn)在支持在ON條件中使用常量過濾謂詞. 舉個(gè)常量過濾謂詞例子ON (1=0). 下面例子從源表插入行到表PRODUCTS, 不檢查這些行是否在表PRODUCTS中存在:

SQL> MERGE INTO products p
??? 2 USING newproducts np
??? 3 ON (1=0)
??? 4 WHEN NOT MATCHED THEN
??? 5 INSERT
??? 6 VALUES (np.product_id, np.product_name, np.category)
??? 7 WHERE np.category = 'BOOKS'
??? SQL> /

??? 1 row merged.

??? SQL> SELECT * FROM products;

??? PRODUCT_ID PRODUCT_NAME CATEGORY
??? ---------- -------------------- ----------
??? 1501 VIVITAR 35MM ELECTRNCS
??? 1502 OLYMPUS IS50 ELECTRNCS
??? 1600 PLAY GYM TOYS
??? 1601 LAMAZE TOYS
??? 1666 HARRY POTTER DVD
??? 1700 WAIT INTERFACE BOOKS
??? 6 rows selected.
??? SQL>?using 后面可以用dual這個(gè)特殊的表,可參考下面的例子(這部分是原創(chuàng))PROCEDURE UPDATE_PR_DATA(p_rec REFD_SECMASTER_BBGPRICE_TMP%ROWTYPE) IS
v_date DATE;
v_now DATE;
BEGIN?
????v_now := SYSDATE;
????v_date := trunc(v_now);

????MERGE INTO REFD_SECMASTER_BBGPRICE p
????USING dual
???? ON (p.fj_secmaster_id = p_rec.fj_secmaster_id
???????????? AND p.fj_price_date = v_date)
????WHEN MATCHED THEN
????UPDATE?
???????? SET p.FJ_MODIFIED_TMS = v_now,
???????????????? ......
????WHEN NOT MATCHED THEN
????INSERT?
???????? (FJ_SECMASTER_ID,
????????????...)
???? VALUES
???????? (p_rec.FJ_SECMASTER_ID,
????????????...
???????? );
END;

4、新增加的DELETE子句?

Oracle 10g中的MERGE提供了在執(zhí)行數(shù)據(jù)操作時(shí)清除行的選項(xiàng). 你能夠在WHEN MATCHED THEN UPDATE子句中包含DELETE子句. DELETE子句必須有一個(gè)WHERE條件來刪除匹配某些條件的行.匹配DELETE WHERE條件但不匹配ON條件的行不會(huì)被從表中刪除.?


下面例子驗(yàn)證DELETE子句. 我們從表NEWPRODUCTS中合并行到表PRODUCTS中, 但刪除category為ELECTRNCS的行.?


SQL> MERGE INTO products p
??? 2 USING newproducts np
??? 3 ON (p.product_id = np.product_id)
??? 4 WHEN MATCHED THEN
??? 5 UPDATE
??? 6 SET p.product_name = np.product_name,
??? 7 p.category = np.category
??? 8 DELETE WHERE (p.category = 'ELECTRNCS')
??? 9 WHEN NOT MATCHED THEN
??? 10 INSERT
??? 11 VALUES (np.product_id, np.product_name, np.category)
??? SQL> /

??? 4 rows merged.

??? SQL> SELECT * FROM products;

??? PRODUCT_ID PRODUCT_NAME CATEGORY
??? ---------- -------------------- ----------
??? 1501 VIVITAR 35MM ELECTRNCS
??? 1600 PLAY GYM TOYS
??? 1601 LAMAZE TOYS
??? 1666 HARRY POTTER TOYS
??? 1700 WAIT INTERFACE BOOKS
??? SQL>?

產(chǎn)品ID為1502的行從表PRODUCTS中被刪除, 因?yàn)樗瑫r(shí)匹配ON條件和DELETE WHERE條件. 產(chǎn)品ID為1501的行匹配DELETE WHERE條件但不匹配ON條件, 所以它沒有被刪除. 產(chǎn)品ID為1700 的行不匹配ON條件, 所以被插入表PRODUCTS. 產(chǎn)品ID為1601和1666的行匹配ON條件但不匹配DELETE WHERE條件, 所以被更新為表NEWPRODUCTS中的值.?

Published by Wiz

轉(zhuǎn)載于:https://www.cnblogs.com/teamleader/archive/2011/10/11/2206792.html

總結(jié)

以上是生活随笔為你收集整理的Oracle中的MERGE语句的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天天狠狠操 | 69国产精品视频免费观看 | 五月中文字幕 | 欧美日韩精品一区二区三区视频播放 | 少妇太爽了 | 干日本少妇首页 | 精品乱子伦一区二区三区 | 国产精品资源网 | 小视频在线播放 | 欧美经典一区二区三区 | 麻豆精品91| 中文字幕国产 | 午夜影院在线 | 日韩另类av | 黄色一级小说 | 天干夜天干天天天爽视频 | 久久五月天综合 | 精精国产xxxx视频在线播放 | 中文字幕婷婷 | 天天想你在线观看完整版电影免费 | 少妇网站在线观看 | 麻豆一区二区三区在线观看 | 精品人妻人人做人人爽 | 国产精品第6页 | 亚洲精品乱码久久久久久麻豆不卡 | 欧美亚洲少妇 | 一本色道久久88综合日韩精品 | 嫩草导航| 国产av成人一区二区三区 | 丁香花电影免费播放电影 | 蜜桃麻豆视频 | 亚洲人免费视频 | 捅肌肌| 男女www视频| 黄片毛片 | 国产一区二区三区免费 | 高hnp视频 | 日韩不卡视频在线观看 | 3o一40一50一6o女人毛片 | 久久99精品国产.久久久久久 | 色婷婷a| 少妇精品久久久久久久久久 | 亚洲国产精品视频 | 69色综合| 午夜综合网 | 日韩性猛交ⅹxxx乱大交 | 成人午夜视频网站 | 九九九视频在线观看 | 男女视频在线 | 亚洲精品亚洲 | 超碰在线a | 国产成人三级一区二区在线观看一 | 91精品啪 | 精品乱码久久久久久中文字幕 | 亚洲国产欧美日韩 | 国产床上视频 | av毛片网| 污片视频在线观看 | 美日韩黄色 | 视频在线观看视频 | 成人爱爱网站 | 天天艹天天操 | av片国产 | 草草影院欧美 | 在线亚洲人成电影网站色www | 国产1级片| 中国浓毛少妇毛茸茸 | 岛国精品在线播放 | 羞羞动漫在线观看 | 日本一区二区精品 | 游戏涩涩免费网站 | 中文字幕人妻一区 | 先锋资源一区 | 亚洲综合少妇 | 国产女人视频 | 精品免费一区二区 | 9色视频| 在线免费av片 | 一区二区的视频 | 女人十八毛片嫩草av | 国产又黄又爽又色 | 久久久久免费视频 | 男生和女生操操 | 福利国产片 | 玉米地疯狂的吸允她的奶视频 | www九九九 | 国产无码日韩精品 | 中出中文字幕 | 精品中文字幕一区二区三区 | 少妇丰满尤物大尺度写真 | 欧美日韩a√ | 成人精品在线看 | 精品人妻av一区二区 | 大乳丰满人妻中文字幕日本 | 极品美女啪啪 | 国产亚洲性欧美日韩在线观看软件 | 日本免费一区二区三区四区五六区 | 色综合久久久久无码专区 | 日韩av综合网 |