当前位置: 首页 > 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.lryc.cn/news/606952.html

相关文章:

  • Vue3 setup、ref和reactive函数
  • ReAct模式深度解析:构建具备推理能力的AI智能体架构
  • 【Linux】System V - 责任链模式与消息队列
  • 机密计算与AI融合:安全与智能的共生架构
  • 动态爱心树
  • Linux(CentOS 7.9) 卸载、安装MySql 5.7详细步骤教程,包括密码设置、字符集设置等
  • 鸿蒙系统PC安装指南
  • 无人机避让路径规划模块运行方式
  • 图论-最短路Floyd算法
  • SpringBoot与Rust实战指南
  • VS Code中配置使用slint(Rust)的一个小例子
  • Java学习第九十六部分——Eureka
  • 基于CNN卷积神经网络图像识别28个识别合集-视频介绍下自取
  • k8s之DevicePlugin
  • 运维端口管理闭环:从暴露面测绘到自动化封禁!
  • 自动驾驶的未来:多模态传感器钻机
  • 【通用视觉框架】基于OpenCvSharp+WPF+YOLO开发的仿VisionMaster的通用视觉框架软件,全套源码,开箱即用
  • CTF实战:用Sqlmap破解表单输入型SQL注入题(输入账号密码/usernamepassword)
  • 音频获取长度
  • armbian 启用nginx并设置访问密码
  • gpu instancer crowd 插件大规模渲染
  • 《操作系统真象还原》 第五章 保护模式进阶
  • 深度SEO优化的方式有哪些,从技术层面来说
  • WaitForSingleObject 函数参数影响及信号处理分析
  • 第15讲——微分方程
  • Shader开发(六)什么是着色器
  • 遥控器信号捕获
  • 软件反调试(7)- 基于NtSetInformationThread设置线程信息
  • 邮件系统哪个好?3种类型邮件系统详细对比
  • 阿里ai流式输出