1.Oracle 中merge into不能更新on中的字段解决方法

本文探讨了在Oracle数据库中使用MERGE INTO语句时,遇到的无法直接更新ON子句中字段的问题,并提供了解决方案。通过将ON子句的条件移至UPDATE后的WHERE子句,可以成功实现字段更新,避免ORA-38104错误。

1.问题描述

merge into执行更新时无法更新on中的字段

2.错误提示

ORA-38104:无法更新on子句中引用的列

3.merge into语法

merge into target_table a

using source_table b

on(a.condition1=b.condition1 and a.condition2=b.condition2 ……)  

when matched then update set a.field=b.field,....

when  not matched then insert into a(field1,field2……)values(value1,value12……)

示例:

merge into CIF_PERBASEINFO a

using (select '37*********X' cardnum  from dual ) b

on (a.CARDNUM=b.cardnum )

when matched then update set cname='更新'

when not matched then insert (cardnum,CNAME) values ( '31**********1' ,'新增');

4.更新on字段中的问题,由于

merge into CIF_PERBASEINFO a

using (select '37*********X' cardnum  from dual ) b

on (a.CARDNUM=b.cardnum and a.ISALLCREDIT is  null )

when matched then update set cname='客户类型1', ISALLCREDIT='A01'

when not matched then insert (cardnum,cname,ISALLCREDIT) values ('37*********X', '客户类型2','A02' )

5.解决办法: on里的条件放到update 之后的where条件里

merge into CIF_PERBASEINFO a

using (select '37*********X' cardnum

       from dual) b

on (a.CARDNUM = b.cardnum )

when matched then

  update

  set cname='客户类型1',

      ISALLCREDIT='A01' where a.ISALLCREDIT is null

when not matched then

  insert (cardnum,cname, ISALLCREDIT)

  values ('37*********X','客户类型2', 'A02')



 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值