最近在修复生产bug时发现一个奇怪的现象,一个普通的查询操作竟然报ORA-01002 fetch out of seqence的错误,觉得有点意思,就把解决思路记录下来,供需要的网友参考。
1.找到报错的服务,看看是谁调用了它(我们暂且命名为A服务);
2.看看是否是参数传入错误;
3.梳理整个调用链,看看是否有业务逻辑错误;
经过一通分析折腾,发现这个报错的服务调用者的上级B服务执行了table表的update ID操作,完事后又马上通过B服务调用了C服务,但是C服务里面又通过ID调用了A服务,在这种情况下,就偶然出现了table表数据ID字段未更新结束,但是C服务又马上执行了查询,导致出现了这种情况,说白了就是事物未处理妥善导致,最后修复办法就是update table表之前先查询出来,然后update之后直接返回table需要的信息即可;