Welcome 微信登录

首页 / 数据库 / MySQL / Oracle 10g中增强的Merge

创建测试表
CREATE TABLE test1 AS
SELECT *
FROM   all_objects
WHERE  1=2;
MATCHED和NOT MATCHED子句均为可选项①两个子句都出现.
MERGE INTO test1 a
USING all_objects b
ON (a.object_id = b.object_id)
WHEN MATCHED THEN
UPDATE SET a.status = b.status
WHEN NOT MATCHED THEN
INSERT (object_id, status)
VALUES (b.object_id, b.status);
②只有插入操作,即只有NOT MATCHED子句
MERGE INTO test1 a
USING all_objects b
ON (a.object_id = b.object_id)
WHEN NOT MATCHED THEN
INSERT (object_id, status)
VALUES (b.object_id, b.status);
③只有更新操作,即只有MATCHED子句
MERGE INTO test1 a
USING all_objects b
ON (a.object_id = b.object_id)
WHEN MATCHED THEN
UPDATE SET a.status = b.status;源表可以包含WHERE子句
①更新和插入均包含WHERE子句
MERGE INTO test1 a
USING all_objects b
ON (a.object_id = b.object_id)
WHEN MATCHED THEN
UPDATE SET a.status = b.status
WHERE  b.status != "VALID"
WHEN NOT MATCHED THEN
INSERT (object_id, status)
VALUES (b.object_id, b.status)
WHERE  b.status != "VALID";
②插入操作包含WHERE子句
MERGE INTO test1 a
USING all_objects b
ON (a.object_id = b.object_id)
WHEN NOT MATCHED THEN
INSERT (object_id, status)
VALUES (b.object_id, b.status)
WHERE  b.status != "VALID";
③更新操作包含WHERE子句
MERGE INTO test1 a
USING all_objects b
ON (a.object_id = b.object_id)
WHEN MATCHED THEN
UPDATE SET a.status = b.status
WHERE  b.status != "VALID";
DELETE子句可以使用该子句删除源表中同时满足ON子句条件及DELETE WHERE子句条件的记录。
MERGE INTO test1 a
USING all_objects b
ON (a.object_id = b.object_id)
WHEN MATCHED THEN
UPDATE SET a.status = b.status
WHERE  b.status != "VALID"
DELETE WHERE (b.status = "VALID");Oracle中的ONS如何获取MERGE操作中UPDATE行数和INSERT行数相关资讯      ORACLE 10G 
  • Oracle 10g(10.2.0.4)升级到10.2.0  (04月10日)
  • Oracle 10g 一主多备的搭建技巧  (07/31/2015 15:31:51)
  • 多平台下的32位和64位Oracle 10g下  (02/18/2015 10:38:21)
  • Oracle 10g实现只读表的N种方法  (08/05/2015 10:54:35)
  • Oracle 10g中约束与列属性NULLABLE  (03/07/2015 19:22:46)
  • Oracle 10g Clusterware Votedisk   (01/16/2015 14:09:54)
本文评论 查看全部评论 (0)
表情: 姓名: 字数