欢迎来到天天文库
浏览记录
ID:51967256
大小:1.63 MB
页数:82页
时间:2020-03-26
《PLSQL总结异常处理及嵌套块.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、PL/SQL总结-3目录处理异常捕获OracleServer异常捕获用户定义异常识别变量作用域处理异常本部分将讲解:在PL/SQL代码中包含异常处理代码的优点PL/SQL块异常处理部分的目的异常处理指南处理异常前面学了如何在PL/SQL块中编写声明部分和执行部分.所有要执行的SQL和PL/SQL代码都写在执行部分.迄今为止我们假设代码只有编译错误.然而,代码会发生难以预料的运行时错误.本部分学习如何在PL/SQL块中处理这些运行时错误.什么是异常?异常是程序的运行时错误,异常会中断程序的正常执行.异常的产生有多种原因:用户输入错误;硬件错误;网页不存在;等等.你使用应
2、用程序和网站时遇到过错误吗?PL/SQL中的异常下例运行正常.但是如果输入的是Korea,South而不是RepublicofKorea呢?DECLAREv_country_namewf_countries.country_name%TYPE:='RepublicofKorea';v_elevationwf_countries.highest_elevation%TYPE;BEGINSELECThighest_elevationINTOv_elevationFROMwf_countriesWHEREcountry_name=v_country_name;DBMS_
3、OUTPUT.PUT_LINE(v_country_name);END;PL/SQL中的异常DECLAREv_country_namewf_countries.country_name%TYPE:='RepublicofKorea';v_elevationwf_countries.highest_elevation%TYPE;BEGINSELECThighest_elevationINTOv_elevationFROMwf_countriesWHEREcountry_name=v_country_name;DBMS_OUTPUT.PUT_LINE(v_countr
4、y_name);END;PL/SQL中的异常代码没有按预期的运行.没有找到有关Korea,South的数据,因为国家名实际上是按RepublicofKorea存储的.这类PL/SQL错误称为异常.异常发生时,我们说异常被“抛出”.异常被抛出时,异常点之后PL/SQL块执行部分的剩余代码不再执行.什么是异常处理代码?异常处理代码定义了异常发生后应当执行的恢复操作.编写代码时,程序员应当预见到代码执行时可能发生的错误的类型.然后为每一种错误编写异常处理代码.异常处理代码是程序员为代码错误编制的处理预案.什么是异常处理代码?程序员使用异常处理代码来处理哪些错误?系统错误(比
5、如磁盘空间耗尽)数据错误(比如,主键值重复)用户错误(比如,数据输入错误)很多其它的可能性!为什么异常处理重要?你能说明为什么异常处理如此重要吗?可能的原因包括:减轻错误对用户的影响(频繁的错误使用户沮丧甚至拒绝使用程序)保护数据库(避免数据丢失或被覆盖)错误消耗大量系统资源(错误发生后,纠正错误代价高昂;用户频繁打电话请求帮助).代码更加易读,因为错误处理代码可在同一个块中的独立部分处理错误.处理PL/SQL异常PL/SQL抛出异常,块执行结束但可编写异常处理代码,在块结束前执行最后的操作.异常处理部分以关键字EXCEPTION开始.处理PL/SQL异常异常如果被处
6、理,PL/SQL程序就不会突然中断.异常抛出后,控制转到异常处理部分,执行相应的处理代码.之后,PL/SQL块正常、成功结束.一个时刻只能发生一个异常.异常发生时,PL/SQL在块结束前只执行一个异常处理代码.处理PL/SQL异常点A的代码不会执行,因为SELECT语句失败.处理PL/SQL异常下面是另一示例.块中select语句用于获取John的last_name.DECLAREv_lnameVARCHAR2(15);BEGINSELECTlast_nameINTOv_lnameFROMemployeesWHEREfirst_namelike'El%';DBMS_
7、OUTPUT.PUT_LINE('Ellen''slastnameis:'
8、
9、v_lname);END;然而,因为有多个John所以会产生异常.处理PL/SQL异常下例中异常处理代码用于处理预定义的Oracle服务错误TOO_MANY_ROWS.下部分将详细学习预定义的Oracle服务错误.DECLAREv_lnameemployees.last_name%TYPE;BEGINSELECTlast_nameINTOv_lnameFROMemployeesWHEREfirst_namelike'El%';DBMS_OUTPUT.PUT_LINE('E
此文档下载收益归作者所有