第一,异常背景:JAVA定时任务调用oracle存储过程
第二,异常信息:
java.sql.SQLException: ORA-06550: 第 0 行, 第 0 列:
PLS-00907: 无法加载库单元 SP_XXX (由 引用)
第三,产生原因:
1,无权限调用该存储过程;
2,调用的存储过程失效。
第四,解决方案:
1,第一种:毫无疑问,增加权限;
2,第二种原因:
首先确认存储过程状态:
SELECT OWNER,OBJECT_NAME,STATUS FROM DBA_OBJECTS WHERE OBJECT_NAME='SP_XXX';
然后确认查询出的 STATUS 值为 INVALID 还是 VALID,如果是INVALID则恭喜你,就是存储过程失效了;
最后,重新编译下该失效的存储过程,问题完美解决。
备注:
1, 存储过程失效一般都是由DDL操作导致,比如修改字段等;
2, 如果是应用程序调用存储过程,可以考虑在应用程序调用存储过程前,先判断下存储过程状态,如果是失效状态,可以编译下存储过程后再调用存储过程。编译语法如下:
alter procedure SP_XXX compile;