我理解RAISE_APPLICATION_ERROR
关联的消息错误只对用户有意义。但是用户不能以下列方式编写类似的异常吗?
DECLARE
e_negative EXCEPTION;
BEGIN
IF v_sid < 0 THEN
RAISE e_negative;
...
EXCEPTION
WHEN e_negative THEN
DBMS_OUTPUT.PUT_LINE ('An id cannot be negative');
答案 0 :(得分:9)
raise_application_error
不只是向控制台打印错误消息(如dbms_output.put_line
所做的那样)。
首先,它是一个实际错误 - 它使语句失败,终止当前块的执行,并传播到外部块(类似于Java中的throw
或Python中的raise
)。
其次,无论控制台如何,它实际上都会返回此错误。 dbms_output
的消息可能会被关闭或忽略,具体取决于客户端。无论客户端如何,引发应用程序错误都可以返回失败的详细信息。