DUP_VAL_ON_INDEX

来源:互联网 发布:切片软件slic3r 编辑:程序博客网 时间:2024/04/30 08:05

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

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

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

这时候需要注意的是,如果直接在那个下面进行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处理后,下面的IFFLAG = 1 THEN的值是TRUE.所以他会继续进行后面的UPDATE处理.这个显然不是我们想要的

0 0
原创粉丝点击