如题:
在执行insert插入的时候,后台显示ora-01002:提取违反顺序错误。
原因:
根据大部分博客和官网的解释,出现这种错误是因为,在数据库遍历游标的时候
有insert的操作,并且执行了commit ,那么,oracle会提示“ORA-01002: 提取违反顺序”。
问题的很简单,但是我查了半年完全没发现我插入的时候,哪里执行了游标操作了。
解决:
首先,查找数据库的job任务,是否有job和自己的操作产生冲突(查了一圈只有早上6点的时候有一个存储过程遍历了游标)。
既然数据库没有问题,那是不是程序在运行抓取数据的时候,有什么操作呢?(我insert的数据里面自己带入了一个uuid型的recid字段,本身系统会自动生成一个uuid,当自己带入的时候,系统会去遍历查询所插入的表,而这个时候我已经主动commit了。-_-)
所以我将原来的recid设置为可以为空,将空值带入。至此,小问题解决。
其他类型的解决方案:
1.在网上百般寻找,大多数给出的建议是设置sql自动提交为false:cn.setAutoCommit(false);
2.想在pl-sql中运行出结果,所以采用了
loop
fetch into
end loop 进行了循环取值,但是在JDBC调用存储过程时,只需要返回一个结果集(cursor)就行,此时就报“ 读取违反顺序”的错,解决办法:去掉loop....end loop 相应代码;
-----------------以后再遇到相应的问题会补充,也希望大家提供相应的问题场景和解决方案