INSERT , UPDATE 和 DUP_VAL_ON_INDEX异常处理

INSERT , UPDATE 和  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处理.这个显然不是我们想要的.

阅读更多
文章标签: insert exception
个人分类: 数据库
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭