ORACLE MERGE INTO讲解

上传人:jiups****uk12 文档编号:39418203 上传时间:2018-05-15 格式:DOC 页数:4 大小:23KB
返回 下载 相关 举报
ORACLE MERGE INTO讲解_第1页
第1页 / 共4页
ORACLE MERGE INTO讲解_第2页
第2页 / 共4页
ORACLE MERGE INTO讲解_第3页
第3页 / 共4页
ORACLE MERGE INTO讲解_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《ORACLE MERGE INTO讲解》由会员分享,可在线阅读,更多相关《ORACLE MERGE INTO讲解(4页珍藏版)》请在金锄头文库上搜索。

1、ORACLE MERGE INTO 讲解讲解1. 建两个表,并插入数据建两个表,并插入数据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, T

2、OYS);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 valu

3、es (1601, LAMAZE, TOYS);insert into NEWPRODUCTS values (1666, HARRY POTTER, TOYS);insert into NEWPRODUCTS values (1700, WAIT INTERFACE, BOOKS);commit;2. 可省略的可省略的 UPDATE 或或 INSERT 子句子句在 Oracle 9i, MERGE 语句要求你必须同时指定 INSERT 和 UPDATE 子句.而在 Oracle 10g, 你可以省略 UPDATE 或 INSERT 子句中的一个. 下面的例子根据表 NEWPRODUCTS 的

4、 PRODUCT_ID 字段是否匹配来 updates 表 PRODUCTS 的信息: MERGE INTO PRODUCTS P USING NEWPRODUCTS NP ON(P.PRODUCT_ID = NP.PRODUCT_ID) WHEN MATCHED THEN UPDATE SET P.PRODUCT_NAME = NP.PRODUCT_NAME,P.CATEGORY = NP.CATEGORY; SELECT * FROM PRODUCTS; SELECT * FROM NEWPRODUCTS; ROLLBACK;在上面例子中, MERGE 语句影响到是产品 id 为 1502

5、, 1601 和 1666 的行. 它们的产品名字 和种 类被更新为表 newproducts 中的值. 下面例子省略 UPDATE 子句, 把表 NEWPRODUCTS 中新的 PRODUCT_ID 插入到表 PRODUCTS 中, 对于在两个表中能够匹 配上 PRODUCT_ID 的数据不作任何处理. 从这个例子你能看到 PRODUCT_ID=1700 的行 被插入到表 PRODUCTS 中. MERGE INTO PRODUCTS P USING NEWPRODUCTS NP ON(P.PRODUCT_ID = NP.PRODUCT_ID) WHEN NOT MATCHED THEN I

6、NSERT VALUES (NP.PRODUCT_ID,NP.PRODUCT_NAME,NP.CATEGORY); SELECT * FROM PRODUCTS; SELECT * FROM NEWPRODUCTS; ROLLBACK;3. 带条件的带条件的 Updates 和和 Inserts 子句子句你能够添加 WHERE 子句到 UPDATE 或 INSERT 子句中去, 来跳过 update 或 insert 操作对 某些行的处理. 下面例子根据表 NEWPRODUCTS 来更新表 PRODUCTS 数据, 但必须字段 CATEGORY 也得同时匹配上: MERGE INTO PROD

7、UCTS PUSING NEWPRODUCTS NPON (P.PRODUCT_ID = NP.PRODUCT_ID)WHEN MATCHED THENUPDATESET P.PRODUCT_NAME = NP.PRODUCT_NAMEWHERE P.CATEGORY = NP.CATEGORY; SELECT * FROM PRODUCTS; SELECT * FROM NEWPRODUCTS; ROLLBACK; 在这个例子中, 产品 ID 为 1502,1601 和 1666 匹配 ON 条件但是 1666 的 category 不匹配. 因此 MERGE 命令只更新两行数据. 下面例子

8、展示了在 Updates 和 Inserts 子句都使用 WHERE 子句: MERGE INTO products pUSING newproducts npON (p.product_id = np.product_id)WHEN MATCHED THENUPDATESET p.product_name = np.product_name,p.category = np.categoryWHERE p.category = DVDWHEN NOT MATCHED THENINSERTVALUES (np.product_id, np.product_name, np.category)WH

9、ERE np.category != BOOKS;SELECT * FROM products;SELECT * FROM NEWproducts;ROLLBACK;注意由于有 WHERE 子句 INSERT 没有插入所有不匹配 ON 条件的行到表 PRODUCTS.4. 无条件的无条件的 Inserts你能够不用连接源表和目标表就把源表的数据插入到目标表中. 这对于你想插入所有行到 目标表时是非常有用的. Oracle 10g 现在支持在 ON 条件中使用常量过滤谓词. 举个常量过 滤谓词例子 ON (1=0). 下面例子从源表插入行到表 PRODUCTS, 不检查这些行是否在表 PRODU

10、CTS 中存在: MERGE INTO products pUSING newproducts npON (1=0)WHEN NOT MATCHED THENINSERTVALUES (np.product_id, np.product_name, np.category)WHERE np.category = BOOKS;SELECT * FROM products;SELECT * FROM NEWproducts;ROLLBACK;5. 新增加的新增加的 DELETE 子句子句Oracle 10g 中的 MERGE 提供了在执行数据操作时清除行的选项. 你能够在 WHEN MATCHED

11、 THEN UPDATE 子句中包含 DELETE 子句. DELETE 子句必须有一个 WHERE 条件来删除匹配某些条件的行.匹配 DELETE WHERE 条件但不匹配 ON 条件的行不会被从 表中删除.下面例子验证 DELETE 子句. 我们从表 NEWPRODUCTS 中合并行到表 PRODUCTS 中, 但 删除 category 为 ELECTRNCS 的行.SELECT * FROM products;SELECT * FROM NEWproducts;MERGE INTO products pUSING newproducts npON (p.product_id = np.

12、product_id)WHEN MATCHED THENUPDATESET p.product_name = np.product_name,p.category = np.categoryDELETE WHERE (p.category = ELECTRNCS)WHEN NOT MATCHED THENINSERTVALUES (np.product_id, np.product_name, np.category);SELECT * FROM products;SELECT * FROM NEWproducts;ROLLBACK;产品 ID 为 1502 的行从表 PRODUCTS 中被删除, 因为它同时匹配 ON 条件和 DELETE WHERE 条件. 产品 ID 为 1501 的行匹配 DELETE WHERE 条件但不匹配 ON 条件, 所以它 没有被删除. 产品 ID 为 1700 的行不匹配 ON 条件, 所以被插入表 PRODUCTS. 产品 ID 为 1601 和 1666 的行匹配 ON 条件但不匹配 DELETE WHERE 条件, 所以被更新为表 NEWPRODUCTS 中的值

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号