概述
1、异常的传播
当PL/SQL块的执行部分产生异常后,根据当前语句块以 及其外层语句块是否有该异常的处理器,异常传播方式分为下 列三种情况:
-- Created on by Hj
declare
v_code NUMBER(6);
v_text VARCHAR2(200);
test number ;
e_test exception;--申明异常
PRAGMA EXCEPTION_INIT(e_test,-2292);--ORA-02292 违反完整约束条件、已找到子记录
i integer;
begin
begin
i:=0;
if i<=0 then
raise e_test; --抛出异常
end if ;
test:=9/i;
exception --捕获异常
when e_test then
dbms_output.put_line('输入除数为0错误');
end ;
exception --捕获异常
when others then
v_code:=SQLCODE;
v_text:=SQLERRM;
dbms_output.put_line('错误代码为'||v_code||'错误信息为'||v_text);
end;
输出如下:
如下:
-- Created on by Hj
declare
v_code NUMBER(6);
v_text VARCHAR2(200);
test number ;
e_test exception;--申明异常
PRAGMA EXCEPTION_INIT(e_test,-2292);--ORA-02292 违反完整约束条件、已找到子记录
i integer;
begin
begin
i:=0;
if i<=0 then
raise e_test; --抛出异常
end if ;
test:=9/i;
exception --捕获异常
when NO_DATA_FOUND then
dbms_output.put_line('输入除数为0错误');
end ;
exception --捕获异常
when others then
v_code:=SQLCODE;
v_text:=SQLERRM;
dbms_output.put_line('错误代码为'||v_code||'错误信息为'||v_text);
end;
输出结果如下:
2、声明部分与异常处理部分异常的传播
与执行部分产生的异常传播方式不同,声明部分和异常处 理部分产生的异常会立刻传播到外层语句块的异常处理部分, 即使当前语句块有该异常的异常处理器也不会进行捕获处理。 如果外层语句块无法处理该异常,则异常继续向外传播,直到 调用环境或主机环境。 当外层语句块捕获并处理内层块的异常后,程序流程继续 向外层传递并执行。
BEGIN
DECLARE
v_number NUMBER(6):= 'ABC';
BEGIN
v_number:=1;
EXCEPTION WHEN VALUE_ERROR THEN DBMS_OUTPUT.PUT_LINE('This is outputted by inner block');
END;
EXCEPTION WHEN VALUE_ERROR THEN DBMS_OUTPUT.PUT_LINE('This is outputted by outer block');
END;
输出如下:
3、异常处理的基本原则
为了保证程序尽可能可靠与安全,编写PL/SQL程序时应 遵循下列原则:
采用错误检验和异常处理相结合。对可能导致程序运行 错误的输入数据进行检查,避免输入数据不正确、实参为空 值、返回记录个数与预期不符等。
在任何可能出现错误的地方添加异常处理器,包括算术 运算错误、字符串操作错误、数据库操作错误等,甚至是与程 序本身无关的错误,如磁盘存储、内存等硬件错误等。应该考虑这些可能错误的发生,保证程序正确执行。
程序设计时要考虑数据库的状态与预期的状态不一致的 情况。例如,要查询的表结构发生变化,添加了新列、删除了 某些列或改变了某些列的数据类型等。为了保证程序的正常运行,定义标量时尽量使用%TYPE属性、定义记录类型变量时 尽量使用%ROWTYPE属性。
不管何时,尽量通过异常名称捕获异常,针对特定的错 误进行处理。尽量少使用OTHERS异常处理器。
异常处理器输出调试信息。如果要将调试信息保存在一 个独立的表中,最好在一个自治程序中完成该操作,这样即使 主程序中发生回滚操作也不影响调试信息的保存。
在异常处理器中,要慎重决定当前事务是进行提交、回 滚还是继续执行。无论错误如何严重,都应该保持数据库的一 致性,避免存储不良数据。
在最外层块的异常处理部分放置OTHERS异常处理器, 避免有未被处理的异常。在OTHERS异常处理器的最后使用 RAISE语句或调用RAISE_APPLICATION_ERROR过程。
最后
以上就是大力菠萝为你收集整理的3、存储过程(PLSQL块)异常的传播1、异常的传播 2、声明部分与异常处理部分异常的传播3、异常处理的基本原则的全部内容,希望文章能够帮你解决3、存储过程(PLSQL块)异常的传播1、异常的传播 2、声明部分与异常处理部分异常的传播3、异常处理的基本原则所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复