plsql异常处理

合集下载

0610PLSQL编程时使用异常处理

0610PLSQL编程时使用异常处理
Oracle 12C数据库应用与设计
《 Oracle 12C数据库应用与设计》
单元6 编写PL/SQL程序处理 Oracle数据库的数据
PL/SQL编程时使用异常处理
2
《 Oracle 12C数据库应用与设计》
异常是指 PL/SQL 程序在执行时出现的错误, 实际应用中,导致 PL/SQL 程序出现异常的原因较 多,例如除数为0、变量长度不够、内存溢出等。 程序运行产生异常时,如果程序中没有对该异 常进行处理的语句,则整个程序将停止执行。 为了使程序有更好的健壮性, PL/SQL 采用统
一的异常处理方法,异常处理程序将进行异常匹配,
程序会跳转到异常语句块,将控制权转给异常处理
程序。

异常处理使用Exception语句块,其基本的语法 格式如下所示。
Exception
When < 异常名称1 > Then < 异常1相应的处理语句1 ; >
When < 异常名称2 > Then < 异常2相应的处理语句2 ; > [ … ] When Others Then < 其他异常相应的处理语句 ; >
4
异常处理部分从关键字 Exception 开始,在 异常处理部分使用 When 子句捕捉各种异常,如 果有其他未预定义的异常,则使用When Others Then子句捕捉与处理,该子句类似Else,需要加 在Exception语句块的最后。
5
《 Oracle 12C数据库应用与设计》

12_PLSQL的异常处理

12_PLSQL的异常处理
... EXCEPTION WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR (-20201,'Manager is not a valid employee.'); END;
12-16
成都信息工程学院· 计算机系
嵌入块能够处理异常或传 递异常到它的上层块
12-15
成都信息工程学院· 计算机系
RAISE_APPLICATION_ERROR
语法
raise_application_error (error_number, message[, {TRUE | FALSE}]);
• 从存储过程中触发用户自定义异常。
1
2
3
12-12
成都信息工程学院· 计算机系
捕获异常中的函数
• SQLCODE
返回错误代码。
• SQLERRM
返回与错误代码相关联的消息。
Байду номын сангаас
12-13
成都信息工程学院· 计算机系
捕获异常中的函数
DECLARE v_error_code v_error_message BEGIN ... EXCEPTION ... WHEN OTHERS THEN ROLLBACK; v_error_code := v_error_message
12-8
成都信息工程学院· 计算机系
捕获非Oracle服务器预定义错误
将一个经过命名的异常和一个特别的Oracle错误相关联。
Declare
Associate
Reference
Exception-Handling Section
Declarative Section

plsql unexpected error

plsql unexpected error

PL/SQL(Procedural Language/Structured Query Language)是一种面向过程的数据库编程语言,常用于Oracle数据库管理系统中。

在进行数据库编程时,我们经常会遇到PL/SQL出现意外错误的情况。

本文将针对PL/SQL出现意外错误的原因和解决方法进行探讨。

一、可能出现意外错误的原因1.语法错误在编写PL/SQL代码时,如果存在语法错误,例如缺少结束分号、拼写错误等,就会导致意外错误的出现。

为了避免这种情况,我们应该仔细检查代码,确保语法正确无误。

2.逻辑错误有时候PL/SQL代码的逻辑可能存在问题,例如变量未正确赋值、循环条件不正确等,这些都可能导致意外错误的发生。

在编写代码时,我们应该对逻辑进行仔细思考,确保代码逻辑正确。

3.数据错误PL/SQL操作数据库时,如果涉及到数据的读取、更新、删除等操作,有可能因为数据本身的问题导致意外错误。

在这种情况下,我们需要对数据进行仔细分析,找出问题所在,并进行相应的处理。

4.环境问题有时候意外错误可能是由于环境配置不正确导致的,例如数据库连接问题、缺少权限等。

在这种情况下,我们需要排查环境配置,确保环境设置正确。

二、解决意外错误的方法1.仔细检查代码在遇到意外错误时,我们应该首先仔细检查代码,寻找可能的语法错误、逻辑错误等,并进行逐个排查,确保代码正确。

2.使用调试工具PL/SQL开发工具通常会提供调试功能,我们可以利用这些调试工具来逐步执行代码,查看变量取值、逻辑执行过程等,从而找出问题所在。

3.日志记录在代码中适当加入日志记录功能,当遇到意外错误时,可以通过日志查看程序执行过程中的各种信息,帮助快速定位问题。

4.参考冠方文档和社区论坛在解决PL/SQL意外错误时,可以参考冠方文档和社区论坛,查找相关问题的解决方法和经验,从而更快速地解决问题。

5.向同事请教有时候遇到意外错误,我们也可以向身边的同事请教,或者进行代码审查,从他人的角度来看问题,可能会有新的解决思路。

plsql异常错误处理

plsql异常错误处理

异常处理
对于预定义异常情况的处理,只需在PL/SQL块的异常处理部分,直接引 用相应的异常情况名,并对其完成相应的异常错误处理即可。
例:更新指定员工工资,如工资小于1500,则加100 DECLARE
v_empno emp.empno%TYPE :=7900;
v_sal
BEGIN
emp.sal%TYPE;
1-14
Copyright © Oracle Corporation, 2001. All rights reserved.
异常错误传播
由于异常错误可以在声明部分和执行部分以及异常错误部分出现,因 而在不同部分引发的异常错误也不一样。
可执行部分产生的异常: 当一个异常错误在执行部分引发时,有下列情况: 1. 如果当前块对该异常错误设置了处理,则执行它并成功完成该块 的执行,然后控制转给包含块。 2.如果没有对当前块异常错误设置定义处理器,则通过在包含块中 引发它来传播异常错误。然后对该包含块执行步骤1)。
用户自定义的异常处理
当与一个异常错误相关的错误出现时,就会隐含触发该异常错误。用 户定义的异常错误是通过显式使用 RAISE 语句来触发。当引发一个异 常错误时,控制就转向到 EXCEPTION块异常错误部分,执行错误处理 代码。
对于这类异常情况的处理,步骤如下 : 在PL/SQL 块的声明部分定义异常情况 : <异常情况> EXCEPTION; RAISE <异常情况> 在PL/SQL 块的异常情况处理部分对异常情况做出相应的处理。
1-9
Copyright © Oracle Corporation, 2001. All rights reserved.
非预定义的异常处理

Oracle PLSQL 异常处理

Oracle PLSQL 异常处理

PL/SQL 异常处理的概念和术语在Oracle 中所有的错误都被认为是不应该发生的异常。

一个异常可能是以下3 种情况的一种:1〉由系统产生的错误(“ out of memory “或“ duplicate value in index “)2〉用户行为导致的错误3〉应用程序给用户的一个警告PL/SQL 用一种异常句柄的结构来捕捉和响应错误。

正是有了异常句柄的存在,我们能很方便的分离异常处理代码与可执行代码。

与线性的代码相比,为了处理异常,异常句柄提供了一种类似事件驱动的模式;换句话说,就是不管一种特定的错误在何时何地发生,它都将被同一个代码处理。

当一个错误出现后,无论它是系统还是程序产生的,都将导致一个异常。

之后,可执行程序被中断,控制权转移给异常处理代码。

处理完异常后,程序将不会回到先前被中断的位置,相反的,控制权被交给了当前程序的外围模块(可能是程序,也可能是系统)。

procedure jimmyisnew_value varchar(35)begin|--------new_value:=old_value || ‘-new’;| if new_value like ‘like%’| then| …..| end if;| exception|----- when value_errorthen…..end;因为old_value 是一个未被定义的变量,所以将产生一个错误,并将给异常处理模块处理。

从异常的可应用范围出发,可将异常分为两类:1、系统异常:由Oracle 定义并由PL/SQL Runtime 引擎在检测到错误时产生的异常。

一些系统异常有名字,比如NO_DATA_FOUND,然而大多数的异常仅仅只有数字编号和描述。

这些异常无论在哪个PL/SQL 中程序都能被应用。

共有21 个命名的系统异常,见下表:2、非预定义异常:没名字的系统异常,可以用Pragma Exception_Int给它关联一个名字。

OracleSQL异常处理

OracleSQL异常处理

OracleSQL异常处理今天学了异常处理有预定义异常与⽤户⾃定义异常还有 raise_application_error()函数raise_application_error() 只能把异常抛出⽽不能处理异常。

预定义异常包括– NO_DATA_FOUND --没有找到数据– TOO_MANY_ROWS --找到多⾏数据– INVALID_CURSOR --失效的游标– ZERO_DIVIDE --除数为零– DUP_VAL_ON_INDEX –唯⼀索引中插⼊了重复值预定义异常的⽰例:declarev_id emp.empno%type; --声明变量beginselect empno into v_id from emp where deptno =40;exception --异常处理when no_data_found then--no_data_found 是使⽤ select 某字段,然后 into 的时候,该字段没有出。

rollback;dbms_output.put_line('没有40号部门记录');when too_many_rows then--too_many_rows 是使⽤ select 某字段,然后 into 的时候,该字段有多个值。

rollback;dbms_output.put_line('返回多条记录');when others then--其它的异常出现rollback;dbms_output.put_line('出现其他错误.');end;⽤户⾃定义异常就是⽤户定义⼀个异常情况,遇到这种情况再对这种情况进⾏处理因为⽤户定义的异常不⼀定是oracle返回的系统错误,系统不会⾃动触发,需要在声明部分定义。

⽤户定义的异常处理部分基本上和预定义异常相同。

declaresalary_level varchar2(1);invalid_salary_level exception; --声明异常beginsalary_level :='D';if salary_level not in ('A','B','C') thenraise invalid_salary_level; --触发异常end if;exception --异常处理when invalid_salary_level thendbms_output.put_line('invalid salary level');end;raise_application_error() 函数只是将异常抛出,不进⾏异常处理,并且终⽌程序。

OraclePLSQL异常处理方法解析

OraclePLSQL异常处理⽅法解析Oracle数据库中的异常:没有异常的转移,因为没有受检异常和⾮受检异常得区分。

1.异常的产⽣:2.异常的处理:declare --变量定义,初始化赋值。

begin --变量的赋值,函数调⽤,if,while等。

exception --异常处理代码 when others then 异常处理语句。

end;3.异常的抛出:raise4.多异常处理:Java的多异常是通过数据类型区分,Oracle数据库的多异常是通过异常编号区分。

区别不同的异常是实现多异常处理前提。

declare verror exception;--定义异常变量 PRAGMA EXCEPTION_INIT(verror ,-111111);--设定异常变量的编号begin --变量的赋值,函数调⽤,if,while等。

exception when verror then 异常处理语句。

--所抛出的异常变量的编号是否和设定好的异常变量的编号⼀致。

when others then 异常处理语句。

--当所抛出的异常编号在exception语句块中不存在时,执⾏该语句(写在最后)。

end;5.⾃定义异常:Java中通过定义⼀个新的异常类实现的。

Oracle中通过异常编号实现的。

eclaren number(1);v_error exception;begindbms_output.put_line('抛出单个异常练习--n只有1位不能保存数字10');n:=10;if n<=0 thenraise v_error;end if;dbms_output.put_line(n);exceptionwhen others then dbms_output.put_line('数值溢出');end;declaren number(1);v_error exception;PRAGMA EXCEPTION_INIT(v_error,-112122);begindbms_output.put_line('抛出多个异常练习');n:=-1;if n<=0 thenraise v_error;end if;dbms_output.put_line(n);exceptionwhen v_error then dbms_output.put_line('不能为负');when others then dbms_output.put_line('数值溢出');end;以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

Oracle教程11PLSQL中异常处理精品PPT课件

◦ 用户定义异常 - 用户可以在 PL/SQL 块的声明部分 定义异常,自定义的异常通过 RAISE 语句显式引 发
处理程序异常
什么是程序异常 预定义异常
当select into语句具有一个无行的结果集时,pl/sql自动引发 no_data_found异常;
当select into语句具有一个多行的结果集时,pl/sql自动引发 too_many_rows异常
DECLARE
errDEEXCCLAEPRTEION;
cateogrdoeryrnVuAmRVCAHRACRH2A(1R02);(5);
BEGIN
BEGIN
SELECT orderno INTO ordernum FROM order_master;
category := '&Category';
EXCEPTION IF category NOT
引发I应F ra用te 程= 0序TH错EN误的语法:
RAISE rate_exception; RAISE_EALPSPLEICATION_ERROR(error_number, error_message);
DBMS_OUTPUT.PUT_LINE('项费率为:' || rate); END IF; EXCEPTION WHEN rate_exception THEN
过程已创建。 SQL> exec p_e1('O'); 返回了多行
用户定义异常
声明用户定义异常
Declare AISE my_error
处理用户定义异常 RAISE_APPLICATION_ERROR使用
异常处理
处理预定义异常 处理用户定义异常

跟我学Oracle数据库系统管理和实现——Oracle PLSQL中的异常处理技术及应用实例


对于用户自定义的异常,SQLCODE返回的是+1,而SQLERRM返 回的是User-Defined Exception。 而如果没有异常被触发,则SQLCODE返回0,SQLERRM返回 “ORA-0000:normal, successful completion”。
10、异常的应用示例
(1)TOO_MANY_ROWS异常的应用示例 查询所有部门号为50的人的员工号(会发生TOO_MANY_ROWS异 常)。
(4)该异常示例代码的执行结果
(3)编译该存储过程
(4)执行调用该存储过程的示例代码
(5)在控制台中显示输出了对应的错误信息,说明异常已经正 确地捕获到并处理。
(6)验证异常触发后是否产生了数据插入行为
没有插入数据。
(7)进一步修改 存储过程中的代码
(8)再次编译存储过程和执行测试的代码,输出的变量没有值
12、用户自定义异常的应用示例
2)而一旦当运行时错误出现于PL/SQL 语句块时,执行的 控制权会传递到该语句块的异常处理部分。
3)借助于WHEN子句,其中的异常NO_DATA_FOUND 会被处 理——提示消息“没有所需要的数据”最终会显示在屏幕 上。
8、异常捕获的基本规则
(1)在异常捕获的语句块中的when子句的数量没有限制,当异 常抛出后,代码的控制流程无条件地转到异常处理部分。 (2)其中的EXCEPTION 关键词开始异常处理部分,而WHEN OTHERS 必须为最后的一条子句。 (3)但在异常语句块中,最终只有一个句柄所代表的异常代码 会被处理和执行。
7、异常捕获处理的语法
(1)语法定义要点 PL/SQL 语句块中的异 常处理首先是保留字 EXCEPTION,而其中的WHEN 子句会判断哪些异常必须被 捕获。 PL/SQL 语句块中的异常 处理部分包含只会在PL/SQL 语句块出现运行时错误时才 会执行的语句。 (2)异常捕获定义的代码

Oracle笔记 七、PLSQL 异常处理

--异常处理declaresNum number := 0;beginsNum := 5 / sNum;dbms_output.put_line(sNum);exceptionwhen others thendbms_output.put_line('is Error!');end;--自定义异常declareex_custom_invaild_age exception; --自定义的异常myerr age int;beginage := &请输入年龄;if (age < 0) thenraise ex_custom_invaild_age; --引发自定义异常elsedbms_output.put_line('年龄是:' || age);end if;exceptionwhen ex_custom_invaild_age thendbms_output.put_line('非法的年龄');end;--引发应用程序异常--raise_application_error(异常编号,说明);declareage int;beginage := &请输入年龄;if (age < 0) thenraise_application_error(-20500, '年龄不能为负数');elsedbms_output.put_line('年龄是:' || age);end if;end;--非预定义异常declareex_custom_error exception;pragma exception_init(ex_custom_error, -1); --把一个编号和一个自定义异常关联,--相当于把-1编号的异常命名为ex_custom_error,这样就可以捕获这种异常begininsert into dept values(10, 'aaa', 'bbb');exceptionwhen ex_custom_error thendbms_output.put_line('部门编号已经存在');end;--异常处理declarevSal emp.sal%type;beginselect sal into vSal from emp;exceptionwhen too_many_rows thendbms_output.put_line('多条数据');when others thendbms_output.put_line('Error');end;declarevSal emp.sal%type;beginselect sal into vSal from emp where empno = 1;exceptionwhen no_data_found thendbms_output.put_line('没有数据');when others thendbms_output.put_line('Error');end;--异常日志处理create table errorLog (id number primary key,errCode number,errMsg varchar2(1024),errDate date);--创建序列,从1开始,每次加1create sequence seq_errorLog_id start with 1 increment by 1;declarevDeptno dept.deptno%type := 10;vErrCode number;vErrMsg varchar2(1024);begindelete from dept where deptno = vDeptno;commit;exceptionwhen others thenrollback;vErrCode := SQLCODE;vErrMsg := SQLERRM;insert into errorLog values(seq_errorLog_id.nextval, vErrCode, vErrMsg, sysdate);commit;end;select * from errorLog;。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle 中的exception——(Raise)1、异常的优点如果没有异常,在程序中,应当检查每个命令的成功还是失败,如BEGINSELECT ...-- check for ’no data found’ errorSELECT ...-- check for ’no data found’ errorSELECT ...-- check for ’no data found’ error这种实现的方法缺点在于错误处理没有与正常处理分开,可读性差,使用异常,可以方便处理错误,而且异常处理程序与正常的事务逻辑分开,提高了可读性,如BEGINSELECT ...SELECT ...SELECT ......EXCEPTIONWHEN NO_DATA_FOUND THEN -- catches all ’no data found’ errors2、异常的分类有两种类型的异常,一种为内部异常,一种为用户自定义异常,内部异常是执行期间返回到PL/SQL块的ORACLE错误或由PL/SQL代码的某操作引起的错误,如除数为零或内存溢出的情况。

用户自定义异常由开发者显示定义,在PL/SQL块中传递信息以控制对于应用的错误处理。

每当PL/SQL违背了ORACLE原则或超越了系统依赖的原则就会隐式的产生内部异常。

因为每个ORACLE错误都有一个号码并且在PL/SQL中异常通过名字处理,ORACLE提供了预定义的内部异常。

如SELECT INTO 语句不返回行时产生的ORACLE异常NO_DATA_FOUND。

对于预定义异常,现将最常用的异常列举如下:exception oracle error sqlcode value conditionno_data_found ora-01403+100select into 语句没有符合条件的记录返回too_many_rows ora-01422-1422select into 语句符合条件的记录有多条返回dup_val_on_index ora-00001-1对于数据库表中的某一列,该列已经被限制为唯一索引,程序试图存储两个重复的值value_error ora-06502-6502在转换字符类型,截取或长度受限时,会发生该异常,如一个字符分配给一个变量,而该变量声明的长度比该字符短,就会引发该异常storage_error ora-06500-6500内存溢出zero_divide ora-01476-1476除数为零case_not_found ora-06592-6530对于选择case语句,没有与之相匹配的条件,同时,也没有else语句捕获其他的条件cursor_already_open ora-06511-6511程序试图打开一个已经打开的游标timeout_on_resource ora-00051-51系统在等待某一资源,时间超时如果要处理未命名的内部异常,必须使用OTHERS异常处理器或PRAGMA EXCEPTION_INIT 。

PRAGMA由编译器控制,或者是对于编译器的注释。

PRAGMA在编译时处理,而不是在运行时处理。

EXCEPTION_INIT告诉编译器将异常名与ORACLE错误码结合起来,这样可以通过名字引用任意的内部异常,并且可以通过名字为异常编写一适当的异常处理器。

在子程序中使用EXCEPTION_INIT的语法如下:PRAGMA EXCEPTION_INIT(exception_name, -Oracle_error_number);在该语法中,异常名是声明的异常,下例是其用法:DECLAREdeadlock_detected EXCEPTION;PRAGMA EXCEPTION_INIT(deadlock_detected, -60);BEGIN... -- Some operation that causes an ORA-00060 errorEXCEPTIONWHEN deadlock_detected THEN-- handle the errorEND;对于用户自定义异常,只能在PL/SQL块中的声明部分声明异常,异常的名字由EXCEPTION 关键字引入:reserved_loaned Exception产生异常后,控制传给了子程序的异常部分,将异常转向各自异常控制块,必须在代码中使用如下的结构处理错误:ExceptionWhen exception1 thenSequence of statements;When exception2 thenSequence of statements;When others then3、异常的抛出由三种方式抛出异常1.通过PL/SQL运行时引擎2. 使用RAISE语句3. 调用RAISE_APPLICATION_ERROR存储过程当数据库或PL/SQL在运行时发生错误时,一个异常被PL/SQL运行时引擎自动抛出。

异常也可以通过RAISE语句抛出RAISE exception_name;显式抛出异常是程序员处理声明的异常的习惯用法,但RAISE不限于声明了的异常,它可以抛出任何任何异常。

例如,你希望用TIMEOUT_ON_RESOURCE错误检测新的运行时异常处理器,你只需简单的在程序中使用下面的语句:RAISE TIMEOUT_ON_RESOUCE;比如下面一个订单输入的例子,若当订单小于库存数量,则抛出异常,并且捕获该异常,处理异常DECLAREinventory_too_low EXCEPTION;---其他声明语句BEGINIF order_rec.qty>inventory_rec.qty THENRAISE inventory_too_low;END IFEXCEPTIONWHEN inventory_too_low THENorder_rec.staus:='backordered';END;RAISE_APPLICATION_ERROR内建函数用于抛出一个异常并给异常赋予一个错误号以及错误信息。

自定义异常的缺省错误号是+1,缺省信息是User_Defined_Exception。

RAISE_APPLICATION_ERROR函数能够在pl/sql程序块的执行部分和异常部分调用,显式抛出带特殊错误号的命名异常。

Raise_application_error(error_number,message[,true,false]))错误号的范围是-20,000到-20,999。

错误信息是文本字符串,最多为2048字节。

TRUE和FALSE 表示是添加(TRUE)进错误堆(ERROR STACK)还是覆盖(overwrite)错误堆(FALSE)。

缺省情况下是FALSE。

如下代码所示:IF product_not_found THENRAISE_APPLICATION_ERROR(-20123,'Invald product code' TRUE);END IF;4、异常的处理PL/SQL程序块的异常部分包含了程序处理错误的代码,当异常被抛出时,一个异常陷阱就自动发生,程序控制离开执行部分转入异常部分,一旦程序进入异常部分就不能再回到同一块的执行部分。

下面是异常部分的一般语法:EXCEPTIONWHEN exception_name THENCode for handing exception_name[WHEN another_exception THENCode for handing another_exception][WHEN others THENcode for handing any other exception.]用户必须在独立的WHEN子串中为每个异常设计异常处理代码,WHEN OTHERS子串必须放置在最后面作为缺省处理器处理没有显式处理的异常。

当异常发生时,控制转到异常部分,ORACLE查找当前异常相应的WHEN..THEN语句,捕捉异常,THEN之后的代码被执行,如果错误陷阱代码只是退出相应的嵌套块,那么程序将继续执行内部块END后面的语句。

如果没有找到相应的异常陷阱,那么将执行WHEN OTHERS。

在异常部分WHEN 子串没有数量限制。

EXCEPTIONWHEN inventory_too_low THENorder_rec.staus:='backordered';replenish_inventory(inventory_nbr=>inventory_rec.sku,min_amount=>order_rec.qty-inventory_rec.qty);WHEN discontinued_item THEN--code for discontinued_item processingWHEN zero_divide THEN--code for zero_divideWHEN OTHERS THEN--code for any other exceptionEND;当异常抛出后,控制无条件转到异常部分,这就意味着控制不能回到异常发生的位置,当异常被处理和解决后,控制返回到上一层执行部分的下一条语句。

BEGINDECLAREbad_credit exception;BEGINRAISE bad_credit;--发生异常,控制转向;EXCEPTIONWHEN bad_credit THENdbms_output.put_line('bad_credit');END;--bad_credit异常处理后,控制转到这里EXCEPTIONWHEN OTHERS THEN--控制不会从bad_credit异常转到这里--因为bad_credit已被处理END;当异常发生时,在块的内部没有该异常处理器时,控制将转到或传播到上一层块的异常处理部分。

BEGINDECLARE ---内部块开始bad_credit exception;BEGINRAISE bad_credit;--发生异常,控制转向;EXCEPTIONWHEN ZERO_DIVIDE THEN --不能处理bad_credite异常dbms_output.put_line('divide by zero error');END --结束内部块--控制不能到达这里,因为异常没有解决;--异常部分EXCEPTIONWHEN OTHERS THEN--由于bad_credit没有解决,控制将转到这里END;5、异常的传播没有处理的异常将沿检测异常调用程序传播到外面,当异常被处理并解决或到达程序最外层传播停止。

相关文档
最新文档