DUP_VAL_ON_INDEX 作用和用法

在写PROCEDURES的时候,INSERT和UPDATE是经常碰到的处理.

有时候会要求对表进行INSERT的时候,如果里面已经有了与该条值的KEY值相同的数据,则对该条数据进行UPDATE处理.

方法是在EXCEPTION 里面加WHEN DUP_VAL_ON_INDEX THEN来进行判断...

这时候需要注意的是,如果直接在那个下面进行UPDATE处理的时候,虽然编译是可以通过的.

逻辑也没有任何问题.可是UPDATE处理是执行不到的.具体原因我也说不清楚.但是我碰过多次这种的情况,所用的解决方法是.在前面定义一个中间变量,类型自己定义,NUMBER ,VARCHAR2都可以.我是定义为NUMBER型的FLAG.

在WHEN DUP_VAL_ON_INDEX THEN 里面写FLAG := 1;就是如果发生该情况的时候.把FLAG值设为1.

然后在INSERT处理后面(注意,不是下一层,他们的关系应该是并列的),加个判断

IF FLAG = 1 THEN

UPDATE.....

需要注意的是,在INSERT之前一定要把自己定义的那个中间变量(也就是我用的FLAG)初始化一下.否则就会发生如下的情况.先是发生KEY值重复的情况.然后FLAG = 1,然后下一条数据进行处理,这个时候如果KEY值不重复,正常情况应该是做INSERT处理而不做UPDATE处理,

我们来分析一下.如果没有之前的初始话,这个时候FLAG的值,仍然是1.进行了INSERT处理后,下面的IF FLAG = 1 THEN 的值是TRUE.所以他会继续进行后面的UPDATE处理.这个显然不是我们想要的.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值