ORACLE I中加入了MERGE
语法
MERGE [hint] INTO [schema ] table [t_alias]
USING [schema ] { table | view | subquery } [t_alias]
ON ( condition )
WHEN MATCHED THEN merge_update_clause
WHEN NOT MATCHED THEN merge_insert_clause;
创建测试数据表
create table tj_test(id numbername varchar()age number);
向表中插入数据
insert into tj_test values (jan);
insert into tj_test values (kk);
insert into tj_test values (joe);
select * from tj_test;
查询结果如下
jan
kk
joe
创建另一新表
create table tj_test as select * from tj_test where =
插入一条数据
insert into tj_test values (jlk);
select * from tj_test
查询结果如下
jkl 注意这里的的NAME字段中的值是jkl
使用MERGE实现有则更新无则插入sql语句如下
merge into tj_test tt
using tj_test tt
on (ttid=ttid)
when matched then
update set
ttname=ttname
ttage=ttage
when not matched then
insert values(
ttid
ttname
ttage)
查询tj_test表(对比原来表中的数据更新了ID= ROW中字段NAME同时多出两条新数据)
select * from tj_test
改变行数据如下
jan 这里的原有jkl值被更新
joe 原来表中没有的插入
kk 原来表中没有的插入
如果存在就更新不存在就插入
i已经支持了是Merge但是只支持select子查询
如果是单条数据记录可以写作select …… from dual的子查询
语法为
MERGE INTO table
USING data_source
ON (condition)
WHEN MATCHED THEN update_clause
WHEN NOT MATCHED THEN insert_clause;
如:
MERGE INTO course c
USING (SELECT course_name period
course_hours
FROM course_updates) cu
ON (urse_name = urse_name
AND cperiod = cuperiod)
WHEN MATCHED THEN
UPDATE
SET urse_hours = urse_hours
WHEN NOT MATCHED THEN
INSERT (urse_name cperiod
urse_hours)
VALUES (urse_name cuperiod
urse_hours);