EBS 中集成的FND_MSG处理很方便的在form中很方便的弹窗、提示消息之外,在写PL/SQL包的时候,也可以方便的进行借用来进行错误信息的收集。并且这个是基于session的,不同于客户化的log日志表。

原理及用法说明

图片1(IBY_UNIQ_ACCOUNT):

图片2(AFDICT- DATABASE STATS):

实例代码:

DECLAREx_msg_count NUMBER;x_msg_data  VARCHAR2(3000);v_msg_index_out NUMBER;v_data          VARCHAR2(1000);
BEGINfnd_msg_pub.Initialize;--或者 fnd_message.CLEAR;fnd_message.set_name('IBY', 'IBY_UNIQ_ACCOUNT'); --设置消息名称fnd_msg_pub.add; --添加到Global Areafnd_message.set_name('FND', 'AFDICT- DATABASE STATS'); --设置消息名称fnd_message.set_token('UPDATES', 'Steven123'); --设置消息内容中变量的值fnd_message.set_token('INSERTS', 'Steven321'); --设置消息内容中变量的值fnd_msg_pub.add; --添加到Global Area--当x_msg_count 为1时,直接输出x_msg_data,否则需要循环输出fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false, p_count => x_msg_count, p_data => x_msg_data);dbms_output.put_line('x_msg_count:' || x_msg_count);dbms_output.put_line('x_msg_data:' || x_msg_data);FOR k IN 1 .. x_msg_countLOOPfnd_msg_pub.get(p_msg_index     => k,p_encoded       => fnd_api.g_false,p_data          => v_data,p_msg_index_out => v_msg_index_out);dbms_output.put_line('(' || v_msg_index_out || ')->' || v_data);END LOOP;fnd_msg_pub.delete_msg();
END;

输出信息:

x_msg_count:2
x_msg_data:
(1)->外部银行帐户已存在
(2)->已更新 Steven123 信息,并已插入 Steven321 信息。

由上面可以看出fnd_message.set_name(APPLICATION => , NAME => ); 这个过程第一个参数是填入应用简称,第2个填入预先定义好的错误消息代码。
fnd_message.set_token(‘UPDATES’, ‘Steven123’) 就是把消息定义中的&XXX 给替换成实际的值。

存储过程二次封装

输出的时候一般用下面这个存储过程输出:

PROCEDURE log_message_list_p ISl_msg_index NUMBER;l_msg_data  VARCHAR2(2000);-------------------------------输出消息队列里面的消息-----------------------BEGINIF (fnd_msg_pub.count_msg > 0) THENlog_p('Error Message Stack :');log_p('----------------------------------------');FOR i IN 1 .. fnd_msg_pub.count_msg LOOPfnd_msg_pub.get(p_msg_index     => i,p_encoded       => fnd_api.g_false,p_data          => l_msg_data,p_msg_index_out => l_msg_index);log_p(l_msg_data);END LOOP;log_p('format_error_stack:' || chr(10) ||dbms_utility.format_error_stack);log_p('format_call_stack:' || chr(10) ||dbms_utility.format_call_stack);log_p('format_error_backtrace:' || chr(10) ||dbms_utility.format_error_backtrace);END IF;EXCEPTIONWHEN OTHERS THENNULL;END log_message_list_p;

在请求中的应用

如果用到EBS请求中的话,还可以这样用:

PROCEDURE main_p(errbuf            OUT VARCHAR2,retcode           OUT VARCHAR2,p_period_num_from IN VARCHAR2,p_period_num_to   IN VARCHAR2) ISl_return_status VARCHAR2(30);l_msg_data      VARCHAR2(2000);l_msg_count     NUMBER;------------------------------调用输出程序------------------BEGINretcode := '0';--............................--业务处理逻辑代码XXXXX--调用标准API--...........................
EXCEPTIONWHEN fnd_api.g_exc_error THENlog_message_list_p;retcode := '1';fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,p_count   => l_msg_count,p_data    => l_msg_data);IF l_msg_count > 1 THENl_msg_data := fnd_msg_pub.get_detail(p_msg_index => fnd_msg_pub.g_first,p_encoded   => fnd_api.g_false);END IF;errbuf := l_msg_data;WHEN fnd_api.g_exc_unexpected_error THENlog_message_list_p;retcode := '2';fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,p_count   => l_msg_count,p_data    => l_msg_data);IF l_msg_count > 1 THENl_msg_data := fnd_msg_pub.get_detail(p_msg_index => fnd_msg_pub.g_first,p_encoded   => fnd_api.g_false);END IF;errbuf := l_msg_data;WHEN OTHERS THENlog_p(dbms_utility.format_error_stack ||dbms_utility.format_error_backtrace);fnd_msg_pub.add_exc_msg(p_pkg_name       => g_pkg_name,p_procedure_name => 'MAIN_P',p_error_text     => substrb(SQLERRM, 1, 240));log_message_list_p;retcode := '2';errbuf  := SQLERRM;END main_p;

参考资料

http://blog.itpub.net/25684327/viewspace-694126/
https://imdjkoch.wordpress.com/tag/fnd_message-set_token/
https://docs.oracle.com/cd/E18727_01/doc.121/e12897/T302934T462354.htm

ORACLE EBS中消息队列fnd_msg_pub、fnd_message在PL/SQL中的应用相关推荐

  1. Oracle入门(十四G)之PL / SQL中检索数据

    一.PL / SQL中检索数据 (1)PL / SQL中的SQL语句 可以在PL / SQL中使用以下几种SQL语句: •SELECT从数据库检索数据. •DML语句,例如INSERT,UPDATE和 ...

  2. oracle 偶数与奇数,在PL / SQL中计算数字中的奇数和偶数

    我们给定一个正整数数字,任务是使用PL / SQL计算数字中奇数和偶数的计数. PL / SQL是SQL与编程语言的过程功能的组合.它是由Oracle Corporation在90年代初开发的,目的是 ...

  3. 金仓数据库KingbaseES 迁移工具—PL/SQL中Oracle和KingbaseES 的对比

    关键字: KingbaseES.PL/SQL.存储过程.函数 一.PL/SQL语言兼容特性 在 PL/SQL 语言方面,KingbaseES 提供了大量的Oracle 兼容特性.这些特性使得大多数的 ...

  4. pl/sql 中关于exception的学习笔记

    1.异常的优点 如果没有异常,在程序中,应当检查每个命令的成功还是失败,如 BEGIN SELECT ... -- check for 'no data found' error SELECT ... ...

  5. Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断后的处理

    介绍Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断后的处. Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断或关机后,重新开机,运行数据库 ...

  6. 消息队列系列二(IOT中消息队列的应用)

    许多消息队列旨在为您的应用程序提供轻量级的发布/订阅消息传输协议.为什么以及何时在您的物联网项目中使用消息队列? 考虑温室中的温度传感器,它测量温度.您的应用程序可以在15分钟的时间间隔内(每天月96 ...

  7. python 消息队列 get是从队首还是队尾取东西_python分布式爬虫中消息队列知识点详解...

    当排队等待人数过多的时候,我们需要设置一个等待区防止秩序混乱,同时再有新来的想要排队也可以呆在这个地方.那么在python分布式爬虫中,消息队列就相当于这样的一个区域,爬虫要进入这个区域找寻自己想要的 ...

  8. Linux系统中消息队列,共享内存、信号和线程的基本操作使用方法

    Linux系统中消息队列,共享内存.信号和线程高级操作 第十一章 消息队列 10.1消息队列定义 10.2 消息队列特点 10.3 key值 10.4 创建消息队列 10.4.1 发送消息 10.4. ...

  9. Linux中消息队列的用法

    一.什么是消息队列 消息队列,Unix的通信机制之一,可以理解为是一个存放消息(数据)容器.将消息写入消息队列,然后再从消息队列中取消息,一般来说是先进先出的顺序.可以解决两个进程的读写速度不同(处理 ...

最新文章

  1. 2020 中国高校薪资排行出炉!好过双一流的高校原来这么多!
  2. Windows上python开发--2安装django框架
  3. linux vi 撤销重做于前进后退--转
  4. c语言编程宝典pdf,C语言编程宝典之一.pdf
  5. 按照姓名升序排序的代码_干货:6种EXCEL排序方法,让老板对你刮目相看
  6. (转)SQL Case when 的使用方法
  7. mysql open table_MySQL open table
  8. LFFD 再升级!新增行人和人头检测模型,还有了优化的C++实现
  9. 项目投标注意点001---项目投标那点事
  10. bat中ERRORLEVEL的使用介绍
  11. 内核kconfig语法及原理
  12. jquery 之for 循环
  13. Matlab 数学建模算法大全
  14. MapReduce读取数据库操作
  15. React初尝试-仿写CNode社区
  16. SAP 业务技术平台(BTP) Workflow(工作流)功能介绍
  17. 数据库读写分离与分库分表
  18. Teams会议/实时事件中的参会者报告详解
  19. DHT11 数字温湿度传感器实验
  20. snowflake做主键 自增_GitHub - MarvinYu/snowflake: Twitter的雪花算法(snowflake)分布式自增ID...

热门文章

  1. Ubuntu Linux 操作系统-清华大学开源软件镜像站下载
  2. 小米手机TCP连接一些奇怪现象
  3. “Adb connection Error:远程主机强迫关闭了一个现有的连接。”的解决方法
  4. 2021年度上海公务员考试公告(11月05日开启)
  5. 资产新增ccid的问题
  6. 【问题记录】02 Linux服务器安装MySql数据库报错:Failing package is: mysql-community-server GPG Keys are configured as
  7. oracle下的inventory文件夹,在 Oracle Home 目录中重建Central Inventory(oraInventory)的步骤...
  8. 手机通过笔记本设置AP(wifi 热点)上网 intel5100 agn 无线网卡 win7系统
  9. 为什么说阿里云和亚马逊云对比,阿里云的性价比比较低?
  10. 无线网ppp服务器失败怎么办,【妙招】不能上网怎么办,史上最全宽带故障简单处理办法!...