数据库

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

oracle函数mergininto用法


发布日期:2024年06月17日
 
oracle函数mergininto用法

所有的MIS系统都存在一个同样的需求就是对于特定的数据在一次批量操作过程中如果数据已经存在则对存在的数据按照现有情况进行

更新如果不存在则需要加入数据库这时我们就可以考虑采用 Oracle 的 MERGE 函数其具体用法如下

MERGE INTO [your tablename] [rename your table here]

USING

(

[write your query here]

)[rename your querysql and using just like a table]

ON

([conditional expression here] AND [])

WHEN

MATCHED

THEN

[here you can execute some update sql or something else ]

WHEN

NOT MATCHED

THEN

[execute something else here ! ]

下面是实例

假设一个student表 有这种需求如果学生ID存在则更改姓名

如果学生ID不存在 则插入学生信息

select>sql@kokooa>select * from student;

S_ID S_NAME S_AGE

李一

李二

李三

李四

李五

李六

select>sql@kokooa>select * from test;

ID NAME TEL ADDRESS

aaa

bbb

ccc

ddd

王五

张三

李四

merge into student s

using

(

select idnametel from test)x

on

(ss_id=xid)

when matched

then update set s_name=xname

when not matched

then insert

(s_ids_names_age)

values

(xidxnamextel);

commit;

最终结果

select>sql@kokooa>select * from student;

S_ID S_NAME S_AGE

aaa

bbb

ccc

ddd

王五

张三

李四

注意到 MERGE 语句在最后的(分号)这仅仅代表 MERGE 为一条完整的 SQL 语句同时要说明一下 USING 语句下方的 SQL 语句这个语句仅仅是为了给后面语句的执行做准备性的工作因此如果你需要的数据仅仅是通过参数传入的那些值的话你就不需要再利用传入进来的参数在重新从库中查询在 Oracle 的系统表中有张 Dual 表这样你便可以使用 select [your arguments] from dual 的方式来构建这里的 SQL 语句其中 [your arguments] 是你得到的一系列的参数由于Dual表是系统表因此可以大幅提升SQL的执行效率

               

上一篇:OracleMetalink帐号重要更改策略

下一篇:Oracle错误案例:TNS-00510