数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

oraclemergeinto用法及例子


发布日期:2020年04月23日
 
oraclemergeinto用法及例子

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);

               

上一篇:在ORACLE里按用户名重建索引的方法

下一篇:ORACLE入门之关于ROLLBACK SEGEMNT