Mybatis Oracle中实现”存在则更新,不存在则插入”的语句

在 MYSQL中,实现要实现在一张表中”更新一条信息,如果不存在则插入“,通常是用ON DUPLICATE KEY UPDATE实现的。举个例子,现在有个应用场景,在客户表(CUSTOMER)里添加一条数据,如果存在该客户(通过主键客户号和账号判断)则更新该客户的手机号(CUST_MOBILE)、购买次数(BUY_TIMES)购买日期(BUY_DATE)

客户表:CUSTOMER
NAMECODEPRIMARY
客户号CUST_NO✔️
客户账号CUST_ACCT✔️
客户姓名CUST_NAME 
客户手机号CUST_MOBILE 
购买次数BUY_TIMES 
购买日期BUY_DATE 

使用MYSQL  ON DUPLICATE KEY UPDATE 实现

insert into CUSTOMER
(
CUST_NO,
CUST_ACCT,
CUST_NAME,
CUST_MOBILE,
BUY_TIMES,
BUY_DATE
)
values(
#{CUST_NO},
#{CUST_ACCT},
#{CUST_NAME},
#{CUST_MOBILE},
'1',
${BUY_DATE}
)
ON DUPLICATE KEY UPDATE
CUST_MOBILE=#{CUST_MOBILE},
BUY_TIMES=BUY_TIMES+1,
BUY_DATE=#{_CURR_DATE}

那么在ORACLE中,如何使用语句实现类似MYSQL中 使用ON DUPLICATE KEY UPDATE 语句的效果呢,语句如下所示

merge into CUSTMOER t1
using (select #{CUST_NO} CUST_NO,#{CUST_ACCT} CUST_ACCT from dual)t2
on (t1.CUST_NO=t2.CUST_NO and t1.CUST_ACCT=t2.CUST_ACCT)
when matched then
update set 
t1.CUST_MOBILE=#{CUST_MOBILE},
t1.BUY_TIMES=BUY_TIMES+1,
t1.BUY_DATE=#{_CURR_DATE}
where t1.CUST_NO=#{CUST_NO} and t1.CUST_ACCT=#{CUST_ACCT}
when not matched then insert(
t1.CUST_NO,
t1.CUST_ACCT,
t1.CUST_NAME,
t1.CUST_MOBILE,
t1.BUY_TIMES,
t1.BUY_DATE
)
values
(
#{CUST_NO},
#{CUST_ACCT},
#{CUST_NAME},
#{CUST_MOBILE},
'1',
#{_CURR_DATE}
)

关于ORACLE 的 dual表,感兴趣的同学可以参考

http://www.cnblogs.com/qiangqiang/archive/2010/10/15/1852229.html

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值