oracle异常的分析
1。通过运行时引擎
2。使用提升语句
三.调用存储过程的raise_application_error
当数据库或PL/sql运行时出现错误时,引擎将自动抛出异常。
提高exception_name;
一个明确的抛出异常是例外,程序员处理声明的习惯用法,但提高不限于声明的例外,可以抛出任何异常。例如,你想和timeout_on_resource错误检测到一个新的运行时异常处理程序,你只需要简单地在程序中使用以下语句:
提高timeout_on_resouce;
例如,以下订单条目的一个示例,如果订单小于库存量,则抛出异常并捕获异常并处理异常。
复制代码代码如下所示:
声明
inventory_too_low例外;
——其他声明语句
开始
如果order_rec数量> inventory_rec.qty然后。
提高inventory_too_low;
最后如果
例外
当inventory_too_low然后
order_rec状况:= 'backordered;
结束;
的raise_application_error内置函数用于抛出一个异常,异常错误数和错误信息的自定义异常错误号码是1,和默认的信息是user_defined_exception.the raise_application_error功能可以和PL / SQL程序块异常部分的执行,明确的把一个命名一个特殊的错误number.raise_application_error例外(error_number,真实,虚假消息{,}))
错误号的范围是从20000到-20999.the错误消息文本字符串,最大有2048 bytes.true和虚假表示是否加入(真)在错误堆(错误的堆栈)或重写错误堆(假),默认为false。
如下面的代码所示:
复制代码代码如下所示:
如果product_not_found然后
raise_application_error(20123,'invald产品代码,真的);
最后如果;
--------------------------------------------------------------------------------------------------
当抛出异常时,控件无条件地进入异常部分,这意味着控件不能返回异常发生的地方。当异常被处理和解决时,它控制返回到上层执行部分的下一条语句。
复制代码代码如下所示:
开始
声明
bad_credit例外;
开始
提高bad_credit;
-异常,转向控制;
例外
当bad_credit然后
dbms_output.put_line('bad_credit);
结束;
——bad_credit异常处理后,控制到这里
例外
当别人然后
控制将不会从这里bad_credit例外
因为bad_credit已被处理
结束;
当发生异常时,当块中没有异常处理器时,控件将被传输或传播到上一块的异常处理部分。
开始
声明-内部块的开始
bad_credit例外;
开始
提高bad_credit;
-异常,转向控制;
例外
当zero_divide然后--不能处理bad_credite例外
dbms_output.put_line('divide零误差);
末端内部块
控件无法到达这里,因为异常没有解决;
部分异常
例外
当别人然后
因为bad_credit尚未解决,控制将被转移到这里
结束;