1,异常处理的概念与分类
,什么是异常?
-
<李>异常:是程序在正常执行过程中发生的未预料的事件。
b,什么是异常处理?
李> <李>异常处理是为了提高程序的健壮性,使用异常处理部分可以有效地解决程序正常执行过程中可能出现的各种错误,使得程序正常运行。c,异常处理的语法格式
<代码>例外 当first_exception 语句1; …… 当second_exception 语句1; …… 当别人然后 语句1; …代码>
d,异常处理代码的PL/SQL块中的位置
<代码>声明/* *声明部分——声明变量,常量,复杂数据类型,游标等 */开始/* *执行部分,PL/SQL语句和SQL语句 */异常/* *异常处理部分,处理运行错误 */结束;——块结束标记代码>李> <李>简单示例代码:查询指定部门的所有员工姓名和工资。
<代码>声明 v_name emp.ename %类型; v_sal emp.sal %类型; 开始 选择ename,萨尔v_name, v_sal从emp empno=,没有; 如果v_sal & lt;3000年之后 dbms_output。put_line (v_name | |”的工资是:“| | v_sal); 如果; 异常 当NO_DATA_FOUND dbms_output.put_line(“员工号输入错误!”); 当别人然后 dbms_output.put_line(“其他错误!”); 结束;代码>
e,异常的分类
李> <李>预定义异常,非预定义异常和自定义异常2,预定义异常
李> <李>预定义异常是指由PL/SQL所提供的系统异常,甲骨文提供了20多个预定义异常,每个预定义异常对应一个特定的甲骨文错误,当PL/SQL块出现这些甲骨文错误时,会隐含地触发相应的预定义异常。李> <李>对于预定义异常情况的处理,无需在程序中定义,只需要在PL/SQL块中的异常处理部分,直接引用相应的异常情况名,并对其完成相应的异常错误处理即可。李> <李>示例代码:根据输入的工资,查询员工的姓名。并输出员工的姓名以及工资。
<代码>声明 v_name emp.ename %类型; v_sal emp.sal %类型:=和工资; 开始 选择从emp ename成v_name sal=v_sal; DBMS_OUTPUT。put_line (v_name | |”的工资是:“| | v_sal); 异常 当NO_DATA_FOUND DBMS_OUTPUT.put_line('没有该工资的员工”); 当TOO_MANY_ROWS DBMS_OUTPUT.put_line(“多个员工具有该工资”); 当别人然后 DBMS_OUTPUT.put_line(“其他错误的); 结束;代码>
3,非预定义异常
李> <李>用于处理预定义异常所不能够处理的甲骨文错误,此种异常需要在程序中定义。,非预定义异常的处理包括3步
1,在PL/SQL块中定义部分定义异常情况:& lt;异常情况比;例外;
2,将其定义好的异常情况与标准的甲骨文错误联系起来,使用编译指示EXCEPTION_INIT语句:编译指示EXCEPTION_INIT (& lt;异常情况祝辞,& lt;错误代码祝辞);
3,在PL/SQL块的异常情况处理部分对异常情况做出相应的处理。
b,代码演示
李> <李>删除部门表中指定部分的信息。(删除部门时应该保证指定部门中没有员工,因为部门和emp表存在主外键关系)1,当删除有其员工的部门时,获取错误号:
<代码>开始 删除从部门deptno=和deptno; 异常 当别人然后 dbms_output。put_line (SQLCODE | |“# # #”| | SQLERRM); 结束;代码>李> <李>当按F8执行,键入20后,控制台打印如下内容:
<代码> -2292 # # # ora - 02292:违反完整约束条件(SCOTT.FK_DEPTNO)——已找到子记录代码>
2,删除部门表中指定部分的信息:
<代码>声明 ,1定义非预定义异常的标识符 e_fk例外; ,2,把Oracle错误和异常信息建立关联 ——-2292违反外键约束的错误号 编译指示EXCEPTION_INIT (e_fk, -2292); 开始 删除从部门deptno=和deptno; 异常 当e_fk ——3、捕捉并处理异常 dbms_output.put_line(“此部门下有员工,不能删除!”); 当别人然后 dbms_output。put_line (SQLCODE | |“# # #”| | SQLERRM); 结束;代码>李> <李>当按下F8执行,键入20后,控制台打印如下内容:
<代码>此部门下有员工,不能删除! 代码>