我有一个java Web应用程序,它从ibatis xml文件调用oracle plsql过程。此过程捕获表的审核信息。所以当多个用户修改一个表这个存储过程。在某个时间后我收到以下错误。
--- example.xml中发生错误 ---应用参数图时发生错误 ---检查example.params。
检查声明(更新程序失败) 原因:java.sql.SQLException:ORA-04068:已丢弃现有的包状态 ORA-04065:未执行,更改或删除存储过程“PUBLIC.PLITBLM” ORA-06508:PL / SQL:找不到被调用的程序单元: “PUBLIC.PLITBLM”ORA-06512:在“AUDIT”,第279行 ORA-06512:第1行
来自ibatis的电话
{调用AUDIT(?,?,?,?,?,?,'val')}
从java web app调用
Map _temp = new HashMap(params);
_temp.put( “OPERATION_TYPE” 操作);
sqlMapper.insert( “call_proc_audit”,_温度);
返回false;
plsql过程只对insert,update和delete执行立即执行。
由于安全问题,我删除了代码。
答案 0 :(得分:1)
PLITBLM包是标准Oracle构建的一部分;显然它处理索引组织表。它没有详细记录,因为它不是我们需要直接调用的东西。 Find out more.某些标准Oracle功能可能依赖于它。
至于为什么你的程序会抛出异常,这有点像面子。该包由Oracle主目录$ORACLE_HOME/rdbms/admin/plitblm.sql
中的脚本创建。但是,它不能单独运行,而只能作为catproc,sql
的一部分运行。这将构建数据字典和其他内容,并作为Oracle安装过程的一部分运行。
也许你有一个拙劣的安装?
有趣的是,实际的PLITBLM包由SYS拥有,但错误消息引用了PUBLIC,这表明它可能只是一个缺少的公共同义词。但是,如果catproc,sql
没有成功运行,可能会有其他潜伏的恶意。您确实需要DBA来检查数据库,并在必要时重新运行catproc,sql
。