`
zhuguo_guo
  • 浏览: 14136 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

oracle merge into 用法

 
阅读更多
用途:
merge 命令可以用来用一个表中的数据来修改或者插入到另一个表,插入或者修改的操作取决于on子句的条件。

该语句可以在同一语句中执行两步操作,可以减少执行多条insert 和update语句。

merge是一个确定性的语句,即不会在同一条merge语句中去对同一条记录多次做修改操作。

语法:
1.into 子句
在into子句中指定所要修改或者插入数据的目标表

2.using 子句
在using子句中指定用来修改或者插入的数据源。数据源可以是表、视图或者一个子查询语句。

3.on 子句
在on子句中指定执行插入或者修改的满足条件。在目标表中符合条件的每一行,oracle用数据源中的相应数据修改这些行。对于不满足条件的那些行,oracle则插入数据源中相应数据。

4.when matched | not matched
用该子句通知oracle如何对满足或不满足条件的结果做出相应的操作。可以使用以下的两类子句。

5.merge_update子句
merge_update子句执行对目标表中的字段值修改。当在符合on子句条件的情况下执行。如果修改子句执行,则目标表上的修改触发器将被触发。
限制:当修改一个视图时,不能指定一个default值

6.merge_insert 子句
merge_insert子句执行当不符合on子句条件时,往目标表中插入数据。如果插入子句执行,则目标表上插入触发器将被触发。
。限制:当修改一个视图时,不能指定一个default值
----------------------

merge into bonuses d

using (select employee_id, salary, department_id from employees

where department_id = 80) s

on (d.employee_id = s.employee_id)

when matched then update set d.bonus = d.bonus + s.salary*.01

when not matched then insert (d.employee_id, d.bonus)

values (s.employee_id, s.salary*0.01); 

---------------------
merge into sup_temp_authorization_temp t

using (select business_id, userid, end_date from 
sup_temp_authorization) s

on (t.business_id = s.business_id and t.userid = s.userid)

when matched then

  update set t.end_date = sysdate + 1

when not matched then

  insert(business_id, userid, end_date, creation_date)

  values('A', 'B', 'C', 'D')
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics