Oracle11g 在什么情况下我们可以使用pragma\u exception\u init
有人能解释为什么我们需要pragma异常init吗。我们有一个用户定义的异常,它与pragma的作用相同。非常感谢您的回答。pragma exception\u init用于为异常提供名称,以便您可以在异常处理程序中通过该名称引用异常。数千个Oracle异常中只有少数具有预定义的名称。您可以使用exception_init为这些其他异常创建名称 看 我正在编辑我以前的答案,因为我可以在这里插入格式化文本。 在您的示例中,您正在定义一个正在抛出的异常,但是如果您希望捕获系统正在抛出但未命名的现有异常,该怎么办?在下面的示例中,我处理了两个特定的错误“DATA_NOT_FOUND”和ORA-600,这是一个系统错误(是的,我有一些代码可以得到这些错误)Oracle11g 在什么情况下我们可以使用pragma\u exception\u init,oracle11g,Oracle11g,有人能解释为什么我们需要pragma异常init吗。我们有一个用户定义的异常,它与pragma的作用相同。非常感谢您的回答。pragma exception\u init用于为异常提供名称,以便您可以在异常处理程序中通过该名称引用异常。数千个Oracle异常中只有少数具有预定义的名称。您可以使用exception_init为这些其他异常创建名称 看 我正在编辑我以前的答案,因为我可以在这里插入格式化文本。 在您的示例中,您正在定义一个正在抛出的异常,但是如果您希望捕获系统正在抛出但未命名的现有异
例如:创建或替换过程proc_pragma_demo,因为i编号:=1;i_大于_零异常;pragma exception_init(大于零,-1234);如果(i>0)开始,则将i_提高到大于零;如果结束;当i_大于_零时异常,然后dbms_输出。put_行('i值大于零:');结束;在上面的例子中,即使我们没有pragma,它也做同样的工作。布拉格语的意义是什么?非常感谢,布莱恩。我明白了。
CREATE OR REPLACE PROCEDURE exception_init_demo
AS
l_routine VARCHAR2 (30) := $$plsql_unit;
severe_system_error EXCEPTION;
PRAGMA EXCEPTION_INIT (severe_system_error, -600);
BEGIN
-- Execution code goes here
NULL;
EXCEPTION
WHEN severe_system_error
THEN
-- Severe error, log it, notify the dba, re-raise the exception
log_error (
p_application => $$plsql_unit
, p_routine => l_routine
, p_message => SQLERRM || UTL_TCP.crlf || DBMS_UTILITY.format_error_backtrace ()
);
notify_dba;
RAISE;
WHEN NO_DATA_FOUND
THEN
-- No data was found, this is OK, ignore error and return
return;
WHEN OTHERS
THEN
-- all other errors we will log and re-raise
log_error (
p_application => $$plsql_unit
, p_routine => l_routine
, p_message => SQLERRM || UTL_TCP.crlf || DBMS_UTILITY.format_error_backtrace ()
);
RAISE;
END;