oracle9i新增sql命令----merge
用途
merge 命令可以用来用一个表中的数据来修改或者插入到另一个表。插入或者修改的操作取决于on子句的条件。
该语句可以在同一语句中执行两步操作,可以减少执行多条insert 和update语句。
merge是一个确定性的语句,即不会在同一条merge语句中去对同一条记录多次做修改操作。
语法
其中,merge_insert_clause::=
关键字、参数
into 子句
在into子句中指定所要修改或者插入数据的目标表
using 子句
在using子句中指定用来修改或者插入的数据源。数据源可以是表、视图或者一个子查询语句。
on 子句
在on子句中指定执行插入或者修改的满足条件。在目标表中符合条件的每一行,oracle用数据源中的相应数据修改这些行。对于不满足条件的
那些行,oracle则插入数据源中相应数据。
when matched | not matched
用该子句通知oracle如何对满足或不满足条件的结果做出相应的操作。可以使用以下的两类子句。
merge_update子句
merge_update子句执行对目标表中的字段值修改。当在符合on子句条件的情况下执行。如果修改子句执行,则目标表上的修改触发器将被触发
。
限制:当修改一个视图时,不能指定一个default值
merge_insert 子句
merge_insert子句执行当不符合on子句条件时,往目标表中插入数据。如果插入子句执行,则目标表上插入触发器将被触发。
限制:当修改一个视图时,不能指定一个default值
merge 范例:
create table f_a(id number(10) not null,tt varchar2(10) default 'abc');
insert into f_a values(11,default);
insert into f_a values(12,'cc');
insert into f_a values(13,'dd');
insert into f_a values(14,'ee');
select * from f_a;
create table f_b as select * from f_a where 1=0;
select * from f_b;
insert into f_b values(11,'china');
MERGE INTO f_b b
USING f_a a
ON (b.id= a.id)
WHEN MATCHED THEN
UPDATE
SET b.tt=a.tt
WHEN NOT MATCHED THEN
INSERT
VALUES
(a.id,a.tt);
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8102208/viewspace-269220/ ,如需转载,请注明出处,否则将追究法律责任。