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
- DUP_VAL_ON_INDEX
- DUP_VAL_ON_INDEX 作用和用法
- INSERT , UPDATE 和 DUP_VAL_ON_INDEX异常处理
- oracle中dup_val_on_index 异常指什么
- spring-依赖注入
- 让viewpage切换无动画效果
- python:os.getcwd()
- 向ios模拟器里添加图片
- 单点登录CAS使用记(六):单点登出、单点注销
- DUP_VAL_ON_INDEX
- 数据库表复制到其他用户下
- 删除表中一列
- 删除表中重复数据
- 关于oracle锁模式
- 创建连接视图注意事项
- 关于OLAP和OLTP
- JS手撸数据结构系列(四) ——Prim算法与迷宫生成
- 关于System表空间