您好,欢迎访问一九零五行业门户网

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

欢迎进入oracle社区论坛,与200万技术人员互动交流 >>进入 3、无条件的inserts 你能够不用连接源表和目标表就把源表的数据插入到目标表中. 这对于你想插入所有行到目标表时是非常有用的. oracle 10g现在支持在on条件中使用常量过滤谓词. 举个常量过滤谓词例
欢迎进入oracle社区论坛,与200万技术人员互动交流 >>进入
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]
其它类似信息

推荐信息