当前位置: 首页 > news >正文

Oracle EBS ERP开发 — 抛出异常EXCEPTION书写规范

        在Oracle EBS ERP接口开发中,异常处理(EXCEPTION)是确保系统稳定性和可维护性的关键环节。规范的异常处理不仅能有效捕获错误,还能提供清晰的错误信息,便于问题排查和系统维护。 

一:不规范 

log_msg(' 下载PLM表开始>>>');
BEGINEXECUTE IMMEDIATE 'drop table cux_plm_item_0';
EXCEPTIONWHEN OTHERS THENNULL; -- 不规范的异常处理:静默忽略所有错误
END;
BEGINEXECUTE IMMEDIATE 'create table cux_plm_item_0 as select * from item_0@plm_link ';EXECUTE IMMEDIATE 'create index cux_plm_item_0_n1 on cux_plm_item_0(md_id) ';EXECUTE IMMEDIATE 'create index cux_plm_item_0_n2 on cux_plm_item_0(status) ';
EXCEPTIONWHEN OTHERS THENNULL; -- 不规范的异常处理:静默忽略所有错误
END;
log_msg(' 下载PLM表结束<<<');

问题分析:

  1. 异常处理块中只有NULL语句,完全忽略所有错误
  2. 没有记录错误日志,无法追踪问题
  3. 没有设置错误状态和错误信息
  4. 没有中断程序执行,可能导致后续操作基于错误状态继续运行

二:规范 

log_msg(' 下载PLM表开始>>>');
BEGINEXECUTE IMMEDIATE 'drop table cux_plm_item_0';
EXCEPTIONWHEN OTHERS THENNULL; -- 删除表失败可以忽略(表可能不存在)
END;
BEGINEXECUTE IMMEDIATE 'create table cux_plm_item_0 as select * from item_0@plm_link ';EXECUTE IMMEDIATE 'create index cux_plm_item_0_n1 on cux_plm_item_0(md_id) ';EXECUTE IMMEDIATE 'create index cux_plm_item_0_n2 on cux_plm_item_0(status) ';
EXCEPTIONWHEN OTHERS THEN-- 1. 定义状态为错误和填写错误信息xv_return_status := fnd_api.g_ret_sts_error;xv_msg_data      := '下载PLM表cux_plm_item_0出现错误.'|| SQLCODE || ' ' ||SQLERRM;-- 2. 对报错的代码重新以正确的方式执行EXECUTE IMMEDIATE 'create table cux_plm_item_0 as select * from DUAL ';EXECUTE IMMEDIATE 'create index cux_plm_item_0_n1 on cux_plm_item_0(md_id) ';EXECUTE IMMEDIATE 'create index cux_plm_item_0_n2 on cux_plm_item_0(status) ';-- 3. 日志打印错误信息和系统错误信息log_msg('下载PLM表cux_plm_item_0出现错误.'|| SQLCODE || ' ' ||SQLERRM);-- 中断执行return;
END;
log_msg(' 下载PLM表结束<<<');

 规范的异常处理三大要素

1. 定义状态为错误和填写错误信息 

在Oracle EBS开发中,标准API通常使用fnd_api.g_ret_sts_error表示错误状态。规范的异常处理应包含:

EXCEPTIONWHEN OTHERS THEN-- 设置返回状态为错误xv_return_status := fnd_api.g_ret_sts_error;-- 填写详细的错误信息xv_msg_data := '自定义错误描述' || SQLCODE || ' ' || SQLERRM;

 关键点:

  • 使用fnd_api.g_ret_sts_error标准错误状态常量
  • 错误信息应包含:业务描述 + 系统错误代码(SQLCODE) + 系统错误描述(SQLERRM)
  • 错误信息应存储在标准变量xv_msg_data中供调用方使用

2. 对报错的代码重新以正确的方式执行

当关键操作失败时,应采取适当的补救措施或清理操作:

EXCEPTIONWHEN OTHERS THEN-- 创建空表作为补救措施EXECUTE IMMEDIATE 'create table cux_plm_item_0 as select * from DUAL ';-- 其他可能的补救措施:-- - 回滚事务-- - 清理临时数据-- - 释放资源

关键点:

  • 根据业务需求设计合理的补救措施
  • 确保补救措施本身不会引发新的异常
  • 补救措施应保证系统处于一致状态

3. 日志打印错误信息和系统错误信息

规范的日志记录是问题排查的基础:

EXCEPTIONWHEN OTHERS THEN-- 记录详细错误日志log_msg('业务操作描述失败: ' || SQLCODE || ' - ' || SQLERRM);-- 可选:记录更多上下文信息log_msg('当前操作: 下载PLM表cux_plm_item_0');log_msg('参数值: p_param1=' || p_param1);

关键点:

  • 使用标准日志函数(如log_msg
  • 日志应包含:业务上下文 + 系统错误代码 + 系统错误描述
  • 可添加关键参数值帮助定位问题
  • 日志级别应合理设置(ERROR级别)
http://www.dtcms.com/a/309117.html

相关文章:

  • 【世纪龙科技】3D交互深度赋能-汽车整车维护仿真教学软件
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现道路汽车的检测识别(C#代码,UI界面版)
  • Apache RocketMQ for AI 战略升级,开启 AI MQ 新时代
  • GXP6040K压力传感器可应用于医疗/汽车/家电
  • 在SQL SERVER 中,用SSMS 实现存储过程的每日自动调用
  • 嵌入式系统教学范式演进:云端仿真平台如何重构温湿度监测实验教学
  • Web开发-PHP应用弱类型脆弱Hash加密Bool类型Array数组函数转换比较
  • 动态规划 Dynamic programming
  • 渗透作业3
  • Kafka Streams 并行处理机制深度解析:任务(Task)与流线程(Stream Threads)的协同设计
  • kafka快速部署、集成、调优
  • 超越 ChatGPT:智能体崛起,开启全自主 AI 时代
  • 中英混合的语音识别XPhoneBERT 监督的音频到音素的编码器结合 f0 特征LID
  • 阿里云微服务引擎 MSE 及 API 网关 2025 年 7 月产品动态
  • 单变量单步时序预测:CNN-LSTM卷积神经网络结合长短期记忆神经网络
  • MybatisPlus如何用wrapper语句灵活连接多查询条件
  • SpringBoot+LangChain4j解析pdf文档,不使用默认解析器
  • 解决VScode加载慢、保存慢,git加载慢,windows11系统最近异常卡顿的问题
  • 高端房产管理小程序
  • 【Ubuntu】安装使用pyenv - Python版本管理
  • ORACLE函数
  • JVM垃圾回收算法和分代收集算法的区别
  • 插件升级:Chat/Builder 合并,支持自定义 Agent、MCP、Rules
  • 深度学习(鱼书)day08--误差反向传播(后三节)
  • Day 28:类的定义和方法
  • 属性的运用和理解
  • 赛博算命之八字测算事业运势的Java实现(四柱、五行、十神、流年、格局详细测算)
  • Redisson实现Redis分布式锁的原理
  • Windows和Linux的tree工具
  • 【智能协同云图库】第七期:基于AI调用阿里云百炼大模型,实现AI图片编辑功能