WEB开发网
开发学院数据库Oracle 详解 Oracle 10g 中 MERGE 功能的增强 阅读

详解 Oracle 10g 中 MERGE 功能的增强

 2007-05-10 12:18:11 来源:WEB开发网   
核心提示: 注意由于有WHERE子句INSERT没有插入所有不匹配ON条件的行到表PRODUCTS.3、无条件的Inserts你能够不用连接源表和目标表就把源表的数据插入到目标表中. 这对于你想插入所有行到目标表时是非常有用的. Oracle 10g现在支持在ON条件中使用常量过滤谓词. 举个常量过滤

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

3、无条件的Inserts

你能够不用连接源表和目标表就把源表的数据插入到目标表中. 这对于你想插入所有行到目标表时是非常有用的. Oracle 10g现在支持在ON条件中使用常量过滤谓词. 举个常量过滤谓词例子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>

4、新增加的DELETE子句

Oracle 10g中的MERGE提供了在执行数据操作时清除行的选项. 你能够在WHEN MATCHED THEN UPDATE子句中包含DELETE子句. DELETE子句必须有一个WHERE条件来删除匹配某些条件的行.匹配DELETE WHERE条件但不匹配ON条件的行不会被从表中删除.

下面例子验证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>

产品ID为1502的行从表PRODUCTS中被删除, 因为它同时匹配ON条件和DELETE WHERE条件. 产品ID为1501的行匹配DELETE WHERE条件但不匹配ON条件, 所以它没有被删除. 产品ID为1700 的行不匹配ON条件, 所以被插入表PRODUCTS. 产品ID为1601和1666的行匹配ON条件但不匹配DELETE WHERE条件, 所以被更新为表NEWPRODUCTS中的值.

上一页  1 2 3 4 

Tags:详解 Oracle MERGE

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接