sql - 将 plsql 异常错误写入 DMBS_OUTPUT 和 FND_FILE 作业日志
问题描述
我有一个MERGE/UPDATE
声明。我想添加异常处理,以便如果更新因任何原因失败,写入 DBMS_output 和作业日志。我想出了一些东西 - 它编译好,但似乎不起作用。
我删除了 MAX(date) 和 group by 以便程序符合要求,但查询本身因“无法获得一组稳定的行”而失败 - 但没有触发异常。
感谢任何建议。
MERGE INTO xxcb_RTL_inbnd_shipments_iface A
USING (select DISTINCT aa.shipment_line_id,aa.transaction_type,aa.last_update_date --max(aa.last_update_date)
from rcv_transactions aa
right join xxcb_RTL_inbnd_shipments_iface bb on aa.shipment_line_id=bb.shipment_line_id
where aa.transaction_type='DELIVER'
AND bb.interface_status='RELEASED'
--group by aa.shipment_line_id,aa.transaction_type
) B ON (a.shipment_line_id=b.shipment_line_id)
when matched then update set a.interface_status='CLOSED'
,a.interface_last_update=sysdate
,a.interface_update_by='ORACLE'
where a.interface_status='RELEASED';
exception when others then FND_FILE.PUT_LINE(FND_FILE.LOG,DBMS_UTILITY.FORMAT_ERROR_STACK);
FND_FILE.PUT_LINE(FND_FILE.LOG,DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
DBMS_OUTPUT.PUT(DBMS_UTILITY.FORMAT_ERROR_STACK);
DBMS_OUTPUT.PUT(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
解决方案
DBMS_OUTPUT
在将命令移到命令上方后,我得到了这个工作FND_FILE
。最初我没有通过并发测试。我认为FND_FILE
之前运行的命令DBMS_OUTPUT
导致异常无法运行DBMS_OUTPUT
删除聚合允许程序仍然编译,但也会产生运行时错误。
这些FND_FILE
命令只能通过并发工作。
顺便说一下,对于那些不知道的人,FORMAT_ERROR_STACK
给出类似 ORA-30926: unable to get a stable set of rows in the source tables' 并FORMAT_ERROR_BACKTRACE
给出 ORA-06512: at "ORA-06512: at "APPS.procedureName", line 21
MERGE INTO xxcb_RTL_inbnd_shipments_iface A
USING (select DISTINCT aa.shipment_line_id,aa.transaction_type,aa.last_update_date--max(aa.last_update_date)
from rcv_transactions aa --may need to examine PO or ISO/Req instead?
right join xxcb_RTL_inbnd_shipments_iface bb on aa.shipment_line_id=bb.shipment_line_id
where --aa.transaction_type='DELIVER'
bb.interface_status='RELEASED'
--group by aa.shipment_line_id,aa.transaction_type
) B ON (a.shipment_line_id=b.shipment_line_id)
when matched then update set a.interface_status='CLOSED'
,a.interface_last_update=sysdate
,a.interface_update_by='ORACLE'
where a.interface_status='RELEASED';
exception when others
then dbms_output.put_line('Error!');
DBMS_OUTPUT.PUT_line(DBMS_UTILITY.FORMAT_ERROR_STACK);
DBMS_OUTPUT.PUT_line(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
FND_FILE.PUT_LINE(FND_FILE.LOG,'Error!');
FND_FILE.PUT_LINE(FND_FILE.LOG,DBMS_UTILITY.FORMAT_ERROR_STACK);
FND_FILE.PUT_LINE(FND_FILE.LOG,DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
推荐阅读
- reactjs - Gatsby,浏览器中无法访问的环境变量
- wso2 - 为什么 APIMCLI 导入过程给我 403 Forbidden?
- python - 在 PostgreSQL 上执行大量类似 SELECT 查询的最有效方法?
- swiftui - SwiftUI - 文本工作,TextField 给出错误
- java - 如何使用 If else 语句创建突发报告以进行绩效评估?
- encryption - 从 Prestashop 1.6 MD5 加密更新到 1.7
- node.js - 如何在不替换 mongodb 中现有数据的情况下进行更新?
- python - 将 Django 连接到 MySql
- google-kubernetes-engine - GCP Composer Airflow 任务卡住或冻结
- c# - 在 localhost 和主机上同时使用 gmail API 令牌