本文共 907 字,大约阅读时间需要 3 分钟。
工作中使用Spring-Boot + Mybatis 的架构编写web服务时,使用Mapper调用Oracle里的存储过程查询业务数据。
在查询调试时,遇到JAVA后台调用Oracle后报错SQLException :Cursor is closed,尝试了几种场景,总结如下:
查阅资料后,发现游标分为显示游标和隐示两种
PROCEDURE XXXX
( i_input1 IN varchar2(30), i_input2 IN varchar2(30), o_cursor OUT CURSOR )
本次遇到的是在Oracle存储过程中显示定义的显示游标的开关问题,那么首先需要找到遇到异常时显示关闭游标()的地方,但很遗憾没有找到;
那么接着找打开游标的地方,发现只有在存储过程最后,查找到数据后才将游标显示打开,那么当出现SQL异常或者在查询到数据之前的校验异常导致程序退出,并没有显示打开,那么遇到Cursor is closed也就能够理解了。参考文章
[1]: https://www.cnblogs.com/heshan664754022/archive/2013/05/22/3092437.html