我目前正在使用 Oracle Forms & Reports 6i 上的一个应用程序,该应用程序具有一个包含包的 10g 数据库,该应用程序有超过 900 个 .fmb/fmx 文件和超过 700 个 .rep/rdf 文件。我已将应用程序复制到另一台计算机,现在它在大多数表格上都给我这些错误:
FRM-40735: XXXXXX trigger raised unhandled exception ORA-04062.
或
ORA-04062 signature of package BLABLA has been changed
我发现我必须重新编译表格才能工作,而且确实如此,但正如我所说,我有很多表格,每次更换计算机时重新编译所有表格和包非常耗时。
问题从何而来?我能做些什么来解决这个问题?
ORA-04062错误发生在Form使用的数据库包的spec发生变化时。将表单从一个客户端移动到另一个客户端不会导致这种情况,除非目标数据库也发生了变化。
部分问题是您使用的是真正版本的 Forms。但我想升级不是一种选择(因为你需要客户端/服务器版本)。
你需要编译所有的表格吗?有多少表单使用受影响的包?如果你必须编译很多表格,最简单的事情就是写一个
.bat
脚本来编译它们。
当远程数据库会话通过到数据库服务器的数据库链接调用 PL/SQL 函数、过程或包时,这也是 PL/SQL 的一个问题,并且服务器上的代码具有比客户端上次调用时更新的时间戳它。
remote_dependencies_mode 参数默认检查存储代码的timestamp。可以改成signature来避免ORA-4062错误
这可能不是您在实例级别更改的内容。
我在 PL/SQL 中使用过的东西:
execute immediate q'[alter session set remote_dependencies_mode = 'SIGNATURE']';
这可能适用于也可能不适用于表格。
如果一切都失败了,如果这是您经常需要处理的问题,可以通过登录触发器在会话中设置它。