Sales Order ORA-04062 FRM-40815 in EBS R12.2.4

Oracle EBS ADAdmin 使用指南
本文档提供了Oracle EBS中ADAdmin工具的使用步骤,包括如何生成消息文件、表单文件、报告文件等,特别强调了如何通过ADAdmin重新编译Oracle表单和库文件。

clip_image001

clip_image004

[oracle@ebs ~]$ su - oracle

[oracle@ebs ~]$ source /u01/install/VISION/fs1/EBSapps/appl/APPSEBSDB_ebs.env

[oracle@ebs ~]$ adadmin

AD Administration Main Menu

--------------------------------------------------

1. Generate Applications Files menu

2. Maintain Applications Files menu

3. Compile/Reload Applications Database Entities menu

4. Maintain Applications Database Entities menu

5. Exit AD Administration

Enter your choice [5] : 1

Generate Applications Files

----------------------------------------

1. Generate message files

2. Generate form files

3. Generate report files

4. Generate product JAR files

5. Return to Main Menu

 

 

https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=452212692670315&id=1554737.1&_afrWindowMode=0&_adf.ctrl-state=mcvcu93dd_4

SOLUTION

Please recompile ONT forms and libraries using adadmin and then test the scenario.

To compile all ONT forms and libraries using Adadmin utility:
From Main Menu, select Maintain Application Files
Enter 6. Generate form files
Do you want to regenerate Oracle Forms PL/SQL library files [Yes] ? Yes
Do you want to regenerate Oracle Forms menu files [Yes] ? Yes
Do you want to regenerate Oracle Forms executable files [Yes] ? Yes
Enter list of products ('all' for all products) [all] : ont
Generate specific forms objects for each selected product [No] ? No

转载于:https://www.cnblogs.com/quanweiru/p/8986616.html

<think>我们正在解决Oracle Forms中的触发器异常处理错误,具体是FRM-40735和ORA-04062。根据错误信息:-FRM-40735:表示在ON-INSERT触发器中发生错误。-ORA-04062:表示在编译时时间戳或签名不匹配,通常是由于依赖对象被修改而导致的。原因分析:ORA-04062错误通常发生在子程序(过程、函数、包等)被重新编译后,而依赖于该子程序的触发器或程序单元在运行时发现其时间戳或签名与编译时不一致。在Oracle Forms中,当表单运行时,如果它引用的数据库对象(如存储过程)被修改并重新编译,那么表单中引用了这些对象的触发器可能会抛出ORA-04062错误。解决步骤:1.确认错误发生的触发器:错误信息指出是ON-INSERT触发器。因此,我们需要检查表单中定义在块级别上的ON-INSERT触发器。2.检查触发器代码:打开表单,找到该触发器,检查其代码。特别注意触发器调用的任何数据库存储过程、函数或包。3.检查依赖的数据库对象:在数据库端,检查触发器代码中调用的所有存储过程、函数、包等。确保这些对象是有效的(没有编译错误)并且没有被修改过(如果表单是在修改前编译的,则需要重新编译表单)。4.重新编译无效对象:在数据库端,使用以下SQL检查无效对象:```sqlSELECT object_name,object_typeFROM all_objectsWHERE status= 'INVALID';```如果发现无效对象,使用`ALTER[OBJECT_TYPE][OBJECT_NAME]COMPILE;`重新编译。5.重新生成表单:如果数据库对象被修改,即使重新编译了数据库对象,也可能需要重新生成表单(.fmb文件编译成.fmx文件),因为表单在生成时记录了依赖对象的时间戳。重新生成表单可以更新这些时间戳。6.避免在运行时修改依赖对象:在生产环境中,应避免在表单运行时修改其依赖的数据库对象。如果必须修改,应同时重新生成并部署表单。7.使用版本控制:确保数据库对象和表单的修改保持同步,使用版本控制工具管理变更。8.错误处理:在触发器中加入异常处理,至少记录错误信息,以便于诊断。例如:```plsqlEXCEPTIONWHEN OTHERSTHENMESSAGE('Error inON-INSERT trigger: '|| SQLERRM);RAISEFORM_TRIGGER_FAILURE;```但注意,这不能解决ORA-04062,因为该错误发生在编译时依赖检查阶段,在触发器代码执行之前。特别注意:ORA-04062错误通常发生在运行时刻,但原因是在编译表单后依赖对象被修改。因此,重新编译表单是解决此问题的关键。总结:重新编译数据库中的无效对象,然后重新生成表单(将.fmb文件重新编译为.fmx文件),并部署新的.fmx文件。相关问题:1.如何重新编译OracleForms模块?2.如何避免OracleForms中的ORA-04062错误?3. OracleForms中常见的触发器错误有哪些?4.如何调试Oracle Forms的触发器错误?</think>### Oracle Forms触发器错误FRM-40735与ORA-04062解决方案 #### 错误分析 1. **FRM-40735** 表示ON-INSERT触发器执行失败,通常由底层数据库错误引发[^1]。 2. **ORA-04062** 本质是数据库对象依赖问题: - 触发器的依赖对象(如存储过程、视图、包)在表单编译后被修改 - 表单运行时检测到对象签名/时间戳不匹配 - 常见场景:数据库对象重新编译后未同步更新表单 #### 解决步骤 ##### 1. 检查触发器代码 ```sql -- 在ON-INSERT触发器中查找依赖对象 BEGIN my_package.insert_data(:block.item); -- 可疑的依赖对象 END; ``` 若存在外部依赖(如`my_package`),进行下一步验证。 ##### 2. 验证数据库对象状态 ```sql -- 检查对象有效性 SELECT object_name, object_type, status FROM all_objects WHERE object_name IN ('MY_PACKAGE', 'DEPENDENT_VIEW') -- 替换为实际对象名 AND status = 'INVALID'; ``` 若返回无效对象,需重新编译: ```sql ALTER PACKAGE my_package COMPILE; ``` ##### 3. 重新生成表单文件 在Form Builder中: 1. 打开`.fmb`源文件 2. 按`Ctrl+Shift+K`强制重新生成所有对象 3. 重新编译为`.fmx`文件并部署 ##### 4. 依赖同步策略 - **开发规范**:修改数据库对象后必须重新编译引用它的表单 - **版本控制**:使用工具(如Git)同步数据库DDL和表单文件变更 - **依赖检查脚本**: ```sql SELECT name, referenced_name FROM user_dependencies WHERE referenced_name = 'MY_PACKAGE'; -- 查找所有依赖对象 ``` ##### 5. 错误处理增强 在触发器添加异常捕获: ```sql EXCEPTION WHEN OTHERS THEN MESSAGE('ON-INSERT错误: ' || SQLERRM); RAISE FORM_TRIGGER_FAILURE; -- 防止数据提交 ``` #### 预防措施 1. 使用**自治事务**隔离数据库操作: ```sql CREATE OR REPLACE PROCEDURE safe_insert AS PRAGMA AUTONOMOUS_TRANSACTION; BEGIN -- 插入逻辑 COMMIT; END; ``` 2. 在`WHEN-NEW-FORM-INSTANCE`触发器中预加载依赖对象 3. 部署前执行依赖验证: ```shell frmcmp_batch module=my_form.fmb userid=user/pwd output_file=val.log compile_all=yes ``` #### 典型场景案例 > 某订单表单提交时报ORA-04062,原因为: > - 开发人员修改了`orders_pkg`包体但未重新编译表单 > - 解决方案: > 1. 重新编译`orders_pkg` > 2. 在Form Builder中强制生成新`.fmx` > 3. 部署后错误消失 --- ### 相关问题 1. 如何诊断Oracle Forms中的其他常见触发器错误如FRM-407342. 在分布式系统中如何避免ORA-04062错误? 3. Oracle Forms与数据库对象版本同步的最佳实践是什么? 4. 自治事务在解决触发器错误中有哪些注意事项? [^1]: Oracle官方文档《Forms Error Messages Reference》中的触发器异常章节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值