格式化(或提供字符串)异常';oracle中的s消息
Oracle数据库中存在参数化错误消息。例如,oraus.msg中有0191900000个“角色“%s”不存在”。 如果有人发出一些废话。。。至…%s被这个不存在的特权所取代。 是否可以引发异常-1919并向%s提供一些字符串 代码:格式化(或提供字符串)异常';oracle中的s消息,oracle,exception-handling,plsql,oracle11g,Oracle,Exception Handling,Plsql,Oracle11g,Oracle数据库中存在参数化错误消息。例如,oraus.msg中有0191900000个“角色“%s”不存在”。 如果有人发出一些废话。。。至…%s被这个不存在的特权所取代。 是否可以引发异常-1919并向%s提供一些字符串 代码: 仅生成ORA-01919:角色“”不存在消息。用户定义异常的目的是我们可以在PL/SQL程序的异常部分捕获特定异常,并优雅地处理它们。例如,如果我们在您的代码片段周围放一些肉 create or replace grant_priv ( p_priv i
仅生成
ORA-01919:角色“”不存在
消息。用户定义异常的目的是我们可以在PL/SQL程序的异常部分捕获特定异常,并优雅地处理它们。例如,如果我们在您的代码片段周围放一些肉
create or replace grant_priv
( p_priv in varchar2
, p_grantee in varchar2 )
is
not_system_privilege EXCEPTION;
PRAGMA EXCEPTION_INIT(not_system_privilege, -01919);
begin
execute immediate 'grant '||p_priv||' to '||p_grantee;
exception
when not_system_privilege then
raise_application_error(-20000, p_priv||' is not a real privilege', true);
when others then
raise;
结束
我们可以把任何东西放在例外部分。在表格或文件中记录错误,发出警报,等等。向上传播异常是一种很好的做法:只有调用堆栈的最顶层(面向用户的层)不应该抛出异常 一个观察结果-看起来您可以使用utl_lms.format_消息进行C样式打印-希望我早知道这一点(这样就不用写了)。似乎只有Ora10及以上
begin
dbms_output.put_line(
utl_lms.format_message(
'A %s is here and a %s is there and a %s too','Giraffe','Lion','Spider'));
end;
我看不出有任何方法可以满足OPs要求——提出系统级异常并替换正确的参数
然而,如果您可以接受使用不同的异常号,那么您可以编写自己的异常处理过程,该过程可以
a) 接收所需异常的序列号
b) 使用utl_lms.get_消息检索文本
c) 使用format_消息在参数中替换
d) 使用生成的文本引发用户定义的异常
问题是,如果您的呼叫系统需要ORA-01919,这将无法工作。谢谢您的回复,但UTL_LMS似乎更适合我的要求。
begin
dbms_output.put_line(
utl_lms.format_message(
'A %s is here and a %s is there and a %s too','Giraffe','Lion','Spider'));
end;