问题描述
嘿,
对于用户定义的异常,我们必须支持多语言错误消息。我们的工作原型看起来像这样:
当然,if语句内部的所有代码都可以放在一个单独的过程中,例如 “raise_application_error_i18n”...
但是我们真正想要并且应该非常舒适的是以这种简单的形式提出例外:
并得到当前NLS语言设置对应的错误信息...
我们如何实现这一目标?Oracle如何在内部实现这一点?
对于用户定义的异常,我们必须支持多语言错误消息。我们的工作原型看起来像这样:
-- userdefinedexception package create or replace package ude authid definer as c_example_number constant pls_integer:=-20105; c_example_msg_en constant utl.varchar2_m:='english error message...'; c_example_msg_es constant utl.varchar2_m:='mensaje de error...'; e_example exception; pragma exception_init(e_example, c_example_number); end; / -- example usage begin raise ude.e_example; exception when ude.e_example then if sys_context('userenv','language') like 'ENGLISH%' then raise_application_error(ude.c_example_number, ude.c_example_msg_en); else raise_application_error(ude.c_example_number, ude.c_example_msg_es); end if; end; /复制
当然,if语句内部的所有代码都可以放在一个单独的过程中,例如 “raise_application_error_i18n”...
但是我们真正想要并且应该非常舒适的是以这种简单的形式提出例外:
begin raise ude.e_example; end;复制
并得到当前NLS语言设置对应的错误信息...
我们如何实现这一目标?Oracle如何在内部实现这一点?
专家解答
如果要将错误消息附加到自定义错误代码,则无论如何都需要使用raise_application_error。如果加薪,除了错误号,你不会收到任何消息。
因此,您还可以创建一个raise_application_error_i18n来处理语言逻辑,并在raise_application_error中调用该语言逻辑。
我会考虑将错误消息存储在表中,将代码和语言映射到文本。例如:
这允许您添加/删除/更改消息而无需更改代码。并将 (可能很多) if分支替换为:
因此,您还可以创建一个raise_application_error_i18n来处理语言逻辑,并在raise_application_error中调用该语言逻辑。
我会考虑将错误消息存储在表中,将代码和语言映射到文本。例如:
create table err_messages ( error_code integer, language varchar2(100), error_message varchar2(255) );复制
这允许您添加/删除/更改消息而无需更改代码。并将 (可能很多) if分支替换为:
select * from err_messages where error_code = sqlcode and language = sys_context('userenv','language');复制
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
735次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
644次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
564次阅读
2025-04-20 10:07:02
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
510次阅读
2025-04-22 00:13:51
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
508次阅读
2025-04-17 17:02:24
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
495次阅读
2025-04-22 00:20:37
一页概览:Oracle GoldenGate
甲骨文云技术
477次阅读
2025-04-30 12:17:56
火焰图--分析复杂SQL执行计划的利器
听见风的声音
436次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
381次阅读
2025-04-15 14:48:05
OR+DBLINK的关联SQL优化思路
布衣
369次阅读
2025-05-05 19:28:36