0

我有一个从 ibatis xml 文件调用 oracle plsql 过程的 java web 应用程序。此过程捕获表的审计信息。因此,当多个用户修改此存储过程的表时。经过一段时间后,我收到以下错误。

--- 错误发生在 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 应用程序调用

Map _temp = new HashMap(params);
_temp.put("OPERATION_TYPE",操作);
sqlMapper.insert("call_proc_audit",_temp);
返回假;

plsql 过程只对插入、更新和删除立即执行。

出于安全考虑,我已经删除了代码。

4

1 回答 1

1

PLITBLM 包是标准 Oracle 构建的一部分;显然它处理索引组织的表。它没有详细记录,因为我们不需要直接调用它。 了解更多。 某些标准的 Oracle 功能可能依赖于它。

至于为什么您的程序会抛出该异常,这有点令人费解。该包是由 Oracle 主目录中的脚本创建的$ORACLE_HOME/rdbms/admin/plitblm.sql。但是,它不能单独运行,只能作为catproc,sql. 这将构建数据字典和其他内容,并作为 Oracle 安装过程的一部分运行。

也许你有一个拙劣的安装?

有趣的是,实际的 PLITBLM 包归 SYS 所有,但错误消息引用了 PUBLIC,这表明它可能只是缺少公共同义词。但是,如果catproc,sql没有成功运行,可能还有其他潜伏的讨厌鬼。您确实需要 DBA 来检查数据库,并在必要时重新运行catproc,sql.

于 2013-06-05T12:11:47.340 回答