关于Oracle的 ora-01002:提取违反顺序错误的方案

本文探讨了在Oracle数据库中遇到的ORA-01002错误:提取违反顺序。通过分析,发现错误源于在遍历游标时进行insert并commit。解决方案包括调整程序设计,避免在游标遍历时commit,以及设置SQL自动提交为false。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如题:

在执行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 相应代码;

 

-----------------以后再遇到相应的问题会补充,也希望大家提供相应的问题场景和解决方案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值