浅谈Oracle数据库中异常处理的教学设计
来源:爱玩科技网
2017.15 浅谈Orac I e数据库中异常处理的教学设计 徐秀勤 (南京信息职业技术学院,江苏南京,210023) 摘要:异常处理是Oracle数据库也是其他语言类课程教学中的难点。本文介绍了在Orac1e数据库课程的教学中如何使学生 理解不同的异常类型,详细介绍了通过教学实例设计帮助学生如何分析并设计异常处理的方法。 关键词:Oracle数据库;异常处理;教学设计;案例 Discussion on the teaching design of exception handling in Oracle database Xu Xiuqin (Nanjing College of Information Technology,Nanjing Jiangsu,210023) Abstract:Exception handling is a difficult problem in the teaching of other Orac1e language classesThis paper introduces how to make students understand different abnormal types in the course of Oracle database .course,and introduces how to design and help students to analyze and design exception handling by teaching examples. Key words:Oracte database 0引言 的健壮性,异常处理是软件开发的一个非常重要的组成部分。由 为测试找出意外情况,重要信息用替代变量处理。操作语句设计 INSERT INTO dept(deptno,dname)VALUES(&dno,‘&d— 在软件执行期间引发的错误或是警告被称作异常。为了软件 如下:(1) 于引起异常的原因千奇百怪,因此在一些大型软件中,异常处理 name’) 为让学生理解异常,测试这条语句至少执行三次,一次是正 代码往往是数据处理代码的数倍。由此在教学中异常处理是不容 忽视的一个重要内容。但在实际教学中,往往由于多种原因,异常 常能添加的记录,另两种是:给dno输入已经存在的部门编号,处理的教学总是被压缩,以至于学生不懂也不会处理异常,异常 或是给dname输入已经存在的部门名称,那么都会有错误提示 处理成了教学中的一个难点。 Oracle数据库中的异常分为三种类型。 (1)预定义异常:这类异常不仅有异常号和引起异常的原因, 的预定义异常,必须要求学生熟悉常见的预定义异常。 “ORA-O0001:唯反唯一约束条件”。然后指导学生比对预定义异 常的产生原因,则可以知道这是一个名称为“DUP AL_0N—INDEX” 的预定义异常。 还给它们赋予了异常标识命名。Orac1e数据库中有21种这样 1.2理解非预定义异常的案例 设计一个试图向emp表中添加一个新雇员记录的案例,设计 (2)非预定义异常:Orac1e服务器返回的除预定义异常之外 语句如下: 的其他异常,只有相应的异常号和引起异常的相应原因,但是没 INSERT INTO EMP(empno,ename,deptno)VALUES(&eno, 有对应的异常标识命名。 ‘&name’,&dno) (2) (3)用户自定义异常:有些意外,执行数据操作时并不会抛出 为把所有的意外情况都找出来,也要多次执行这条语句。当 异常,这类情况如果希望有提示,则必须由开发人员使用条件语 给eno输入一个已经存在的雇员号,则会出现“ORA一00001:唯 句来处理,可以直接给出提示信息,也可定义异常并用RAISE语 反唯一约束条件”的错误提示,这是第一类预定义异 DUP—VAL— 句显式引发该异常,然后捕获处理。 ONINDEX”。如果给dno输入一个dept表中不存在的部门编号, 在Oracle教学中,一般使用SCOTT方案下的dept与emp两 会出现“ORA一02291:违反完整约束条件没找到父项关键字”的 个表作为教学用例数据表。这两个数据表的相关信息及约束规则 错误提示。再次指导学生比对预定义异常的产生原因,发现这个 请读者自行查阅相关材料。 异常在预定义异常中找不到,它就是一个非预定义异常。 1区别并理解不同类型异常的教学设计 在教学过程中,想让学生充分理解不同的异常。老师要针对 常情况。 1.3理解用户自定义异常的案例 设计一个试图增加emp表中某个指定雇员的工资的案例,语 UPDATE emp set sal=sal+&incsal WHERE empno=&eno(3) 三种异常分别演示数据库操作,学生也跟随操作,体会不同的异 句设计如下:1.1理解预定义异常的案例 设计一个试图向dept表中添加一个新的部门信息的案例。 测试这条语句,故意将雇员号输成了一个雇员表中不存在的 雇员号,那么执行这条语句时并不会出现错误提示,只会提示: 67 1 日日Ⅲ圃 网络与信惠I程 2017, 己更新0行,明显没达到修改雇员工资的操作效果。像这样的情 输入有提示信息。除了使用if语句常规处理外,也可以使用用 况,就需要软件开发人员设计用户自定义异常,给出类似“该雇员 户自定义异常处理。在教学过程中,可以先设计一个用if语句来 不存在!”这样的信息,从而给用户一个操作警示。 处理的案例,然后再设计一个用户自定义异常处理的案例。两个 2预定义异常处理教学设计 PL/SQL块中使用EXCEPTION块来处理异常,其中捕获异常 是根据异常标识名来捕获的,所以一般情况下能直接捕获到有命 名的预定义异常。比如最常见的有NO DATA FoUND、TOO MANY— ROWS、DUP VAL ON INDEX等。可以在PL/SQL中设计相应的例题 来捕获这几种异常,并用输出语句给出恰当的信息提示。先设计 没有异常处理的案例:要显示某个指定姓名的雇员的工资。在 案例都演示执行,学生就能体会出异常处理与常规处理完全不同 的处理方法。另外要让学生明白,在实际开发中,这些异常标识定 义好后,可以多次重复利用,这是用异常处理比使用条件语句处 理的优点。 用户自定义异常处理具体方法:在PL/SQL块的声明部分, 先声明一个异常标识,然后在PL/SOL块的BEGIN处理部分,满足 某个条件时抛出这个异常标识,那么在EXCEPTION只要捕获这 PL/SQL块语句设计如下: DECI ARE Vsal emp.sa1%type BEGIN SELECT sal into v_sal from emp where ename:up— per(‘&name’) (4) END: 在执行上述PL/SQL代码块时,那么输入的姓名可能会存在 几种情况呢?会有什么意外呢?这个问题要抛给学生去思考。 让学生通过思考,知道可能存在的情况:第一种,输入的姓名存 在且唯一,这是理想的也是希望的结果;第二种输入的姓名不存 在,查不到想要的结果,会“抛出ORA一01403未找到任何数据”的 异常,经比对即可知道这是预定义异常‘NODATA FOUND”;第二种 情况,姓名重复的,返回不止一行数据,那么就会抛出“TOO_MANY ROWS”0这样学生就知道如何去发现异常存在的可能性。 经过上述分析后,然后再完善上述代码,按照语法格式加入 异常处理就非常容易了。 3非预定义异常处理教学设计 对于上面序号为(2)的案例,Oracle会抛出异常。但是 由于只有错误号一02291,没有相应的异常标识,就不能直接用 EXCEPTION块中的WHEN子句来捕获处理。这种情况下,就要取一 个临时的异常标识名,并通过某个语句将这个异常标识名与该异 常的错误号关联。这样,通过这个临时的异常标识就能捕获到该 异常了。在PL/SQL块的声明部分,通过以下两句就可以将一02291 与一个异常标识关联。 errref EXCEPTION:一定义一个异常标识errref (5) PRAGMA EXCEPTIONINIT(errref,一02291):__将错误 号一02291与err ref关联 (6) 然后在案例的PL/SQL块的EXCEPTION部分添加捕获err ref的异常处理。 4用户自定义异常处理教学设计 前面序号(3)所标注的为学生理解用户自定义异常的案例, 无论什么情况,执行都不会出现异常,但是用户又希望针对错误 个异常标识,编写相应的处理语句即可。完善上述(3)操作的PL/ SQL块如下: DECLARE e r_us EXCEOPTION:一声明了一个异常标识eZr_US@Z订) BEGIN UPDATE e坤 set sal sal +200硼ERE e ̄pne= no; IF SQL%NO'I'FOUI ̄傩N RAISE ̄n:z usez; 一抛出erz-usez这个异常 (8) E如)IF: E戏EPTION 硼El薯erx_usez傩N 一捕获erz 8er舁常 (9) dhm¥outpu ̄.put_line( 滚磨员不存在I ) 一给出帽砬攫示 END 上述(7)、(8)、(9)所标注的代码行是用户自定义异常处理的关 键代码。为了学生充分理解代码的正常与抛出异常的执行情况, 上述代码至少测试两次,为eno输入两个不同的值,一个是emp 表中存在的,一个是emp表中不存在的,观察与体会两种情况执 行结果。 用户自定义异常相对而言是最难处理的异常,主要是不知什 么情况下要用这类异常处理。这就要强调在完成数据库某些操作 时要多考虑一些意外情况,当需要为这些意外情况加些警告信息 时,那么就可以考虑使用用户自定义异常来处理了。 5总结 本文简单介绍了不同类型异常的理解与区分,以及详细介绍 了如何在PL/SQL块中三种不同类型的异常处理的教学设计。为 了巩固异常处理方法,在随后的存储过程、函数、触发器等数据库 对象的教学中也要经常启发学生如何分析与设计异常处理。总而 言之,异常处理,要教会学生学会分析每种数据库操作会不会存 在意外情况,然后一一设计相应案例测试,根据测试情况设计出 相应的异常处理。除此以外用户自定义异常还可以绑定一个错误 号与错误信息,这里由于篇幅不再一一阐述。 参考文献 【1 J张润花,姜雪茸.高职院校Oracle数据库课程教学研究及常 见问题处理[J].甘肃科技,201 l,(10):l76—177. 【2】邹妍,白彦辉,张巍娜.“Oracle数据库系统”实验教学改革研 究【J].赤峰学院学报(自然科学版),2015,(12)257—259.