4

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

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');

问题是:

  1. 消息“USERENV('COMMITSCN') not allowed here”是如何定义的?

  2. 如何在我的代码中做到这一点?

非常感谢你的回答!

4

1 回答 1

3

使用 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;

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

分享和享受。

于 2014-07-23T11:56:14.827 回答