oracle - 带有自定义消息的用户定义异常

标签 oracle exception message user-defined

想要为用户定义的异常定义自定义消息。我现在所拥有的:

declare 
  e exception;
  pragma exception_init (e, -20100);
begin 
  raise e;
end;

ORA-20100: 
ORA-06512: at line 5

我想要的是:
exec dbms_output.put_line(userenv('COMMITSCN'))

ORA-01725: USERENV('COMMITSCN')  not allowed here
ORA-06512: at "SYS.STANDARD", line 202
ORA-06512: at line 1

在“SYS.STANDARD”,第 202 行,我们可以看到:
raise USERENV_COMMITSCN_ERROR;

异常在规范中定义为:
  -- Added for USERENV enhancement, bug 1622213.
  USERENV_COMMITSCN_ERROR exception;
    pragma EXCEPTION_INIT(USERENV_COMMITSCN_ERROR, '-1725');

问题是:
  • 消息“USERENV('COMMITSCN') not allowed here”是如何定义的?
  • 如何在我的代码中做到这一点?

  • 非常感谢你的回答!

    最佳答案

    使用 RAISE_APPLICATION_ERROR 过程引发异常允许您将消息与错误相关联:

    DECLARE
      e EXCEPTION;
    
      PRAGMA EXCEPTION_INIT (e, -20100);
    BEGIN
      RAISE_APPLICATION_ERROR(-20100, 'This is the user-supplied message');
    EXCEPTION
      WHEN e THEN
        DBMS_OUTPUT.PUT_LINE('Caught e: ' || SQLCODE || ' ' || SQLERRM);
      WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Caught something else: ' || SQLCODE || ' ' || SQLERRM);
    END;
    

    Documentation here - 特别是,阅读标题为“定义您自己的错误消息:过程 RAISE_APPLICATION_ERROR”的部分。

    分享和享受。

    关于oracle - 带有自定义消息的用户定义异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24909485/

    相关文章:

    c++ - 异常对象生命周期

    linux - linux 套接字轮询是否处理离散消息?

    java - 发送文件然后通过套接字发送消息

    Oracle 12 C 安装错误

    linux - 将文本管道化到 bash 脚本中

    oracle - 何时在 Oracle 中重新引发相同的异常

    c# - 为什么这段代码会抛出 'System.ArgumentOutOfRangeException' (SQlite)?

    sql - 为什么这些看似相似的查询具有如此截然不同的运行时间?

    java - 如何手动退出 while 循环 (java)

    ios - Swift 中的结构问题以及从 url 制作 UIImage 的问题?