尽管一个异常在同一时刻只能抛出一次,但是实际上错误的消息文本可能包含来自多个异常的消息,这是因为异常具有传递性。在OTHERS处理器中处理异常时,有几种方法可以得到错误信息栈中的错误消息,其中最常用的是SQLCODE和SQLERRM。
SQLCODE函数返回当前的错误编码,对于用户自定义的异常,SQLCODE总是返回1;SQLERRM用于返回错误消息文本,对于自定义的异常,SQLERRM总是返回“User-defined Exception”。
用法如:
...
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('错误编号:'||SQLCODE||' 错误消息:'||SQLERRM);
END;
SQLERRM函数还可以接受一个参数,如:
DBMS_OUTPUT.PUT_LINE(SQLERRM(0)); -- 这将返回:ORA-0000:normal,successful completion
要返回NO_DATA_FOUND
的错误消息,可以传递错误号100,将返回ORA-01403错误,如SQLERRM(100)
。
大多数情况下使用不带参数的SQLERRM即可,不带参数的函数调用将返回完整的错误信息。