oracle 之 merge into 函数--简译

来源:互联网 发布:php mvc 开发实战 编辑:程序博客网 时间:2024/06/08 17:24

merge into   函数   oracle 数据库独有的函数,在9i版本以后添加的。具体历史和支持版本请百度。


merge into    函数  主要实现有则更新无则插入。   


一般格式如下


merge into t_info_archives[表名]  table1         [源表]

using (v_info_archives[视图/表名/] ) view1      [条件应用表]

on(view1.age > 18)[条件]

when matched then[符号条件]

update set table1.AdultSign = '1'[所执行的语句]

when not matched then [不符合条件]

update set table1.AdultSign ='0'   [所执行的语句];


个人理解  merge into 是类似与If 语句   的分支,只不过功能比较强大,适合做数据的批量变更,由于是官方函数,执行速度也是非常理想的。


重点:有则更新无则插入    


merger into 需要修改的表名 t1

using (select count(1) as num  from 需要修改的表名  where 条件 ) t2

on (t2.num > 0)                                 --判断是否有符合条件的数据

when matched then 

update set  要修改的数据  where 条件    --要记住,这里要加条件否则的话,将是将全变进行修改

when not matched then 

insert  (表字段) values(要插入的值)


直接上deom  


表  t_info_archives

name    |       age     |      adultsign   

        张三       |       21       |          NULL

        李四       |        18      |          NULL

        王五       |        17      |          NULL


sql <

MERGE INTO t_info_archives t1
USING (SELECT COUNT(1) AS NUM FROM t_info_archives WHERE age < 18 ) t2
ON (t2.num > 0)
WHEN MATCHED THEN 
  UPDATE SET t1.adultsign = 1 WHERE age < 18
WHEN NOT MATCHED THEN 
  INSERT (NAME , age , adultsign) VALUES ('马六' , '16', '1');

结果  

name    |     age      |         adultsign

        张三       |       21      |          NULL

        李四       |       18      |          NULL

        王五       |        17     |                1


sql语句的逻辑为:判断表中是否有小于18岁的,有则将其成年标志位置1


修改   sql 年龄将  18改为17   ,表中没有符合的,执行语句。

结果

 

name    |     age      |         adultsign

        张三       |       21      |          NULL

        李四       |       18      |          NULL

        王五       |        17     |                1

        马六       |         16    |                1


    有则更新,无则插入      就是上面这样的。


这个merge into    可以有多种变形  ,主要看的你要判断 什么, 符合执行什么,不符合执行 什么。


扔个彩蛋。关于 pro*c 编译 merge   into  报错   的处理方式。可以放弃EXEC SQL 这样的形式,采用动态sql 形式 执行。




















原创粉丝点击