甲骨文异常错误处理

  

即使是写得最好的PL/SQL程序也会遇到错误或未预料到的事件。一个优秀的程序都应该能够正确处理各种出错情况,并尽可能从错误中恢复。任何甲骨文错误(报告为ORA-xxxxx形式的甲骨文错误号),PL/SQL运行错误或用户定义条件(不一写是错误),都可以。当然了,PL/SQL编译错误不能通过PL/SQL异常处理来处理,因为这些错误发生在PL/SQL程序执行之前。
甲骨文提供异常情况(异常)和异常处理(异常处理程序)来实现错误处理。

  

1异常处理概念
异常情况处理(异常)是用来处理正常执行过程中未预料的事件,程序块的异常处理预定义的错误和自定义错误,由于PL/SQL程序块一旦产生异常而没有指出如何处理时,程序就会自动终止整个程序运行。

  

有三种类型的异常错误:
1。预定义(预定义的)错误
甲骨文预定义的异常情况大约有24个。对这种异常情况的处理,无需在程序中定义,由ORACLE自动将其引发。
2。非预定义(预定义的)错误
即其他标准的甲骨文错误。对这种异常情况的处理,需要用户在程序中定义,然后由ORACLE自动将其引发。
3。用户定义(User_define)错误
程序执行过程中,出现编程人员认为的非正常情况。对这种异常情况的处理,需要用户在程序中定义,然后显式地在程序中将其引发。

  

异常处理部分一般放在PL/SQL程序体的后半部,结构为:

  


异常当first_exception & lt;代码来处理第一个例外的在
当second_exception & lt;代码来处理第二个例外的在
当别人然后& lt;代码来处理其他例外的在

  

结束;   

异常处理可以按任意次序排列,但其他人必须放在最后。

  

1预定义的异常处理
预定义说明的部分甲骨文异常错误
凹坠俏囊斐4砦蟠怼?所有错误代码和描述,文件在$ ORACLE_HOME/rdbms/mesg oraus.msg
对这种异常情况的处理,只需在PL/SQL块的异常处理部分,直接引用相应的异常情况名,并对其完成相应的异常错误处理即可。
例1:更新指定员工工资,如工资小于1500年,则加100;
D: \ instantclient_12_2> sqlplus人力资源/hr@pdbtest

  

SQL * +:释放12.2.0.1.0生产>   <李>   

将其定义好的异常情况,与标准的甲骨文错误联系起来,使用EXCEPTION_INIT语句:
杂注EXCEPTION_INIT (& lt;异常情况祝辞,& lt;错误代码祝辞);

  李   <李>在PL/SQL块的异常情况处理部分对异常情况做出相应的处理。      

例1:删除指定部门的记录信息,以确保该部门没有员工。
完成;声明
2 v_deptno departments.department_id %类型:=deptno;
3 deptno_remaining例外;
4编译指示EXCEPTION_INIT (deptno_remaining, -2292); 5
/ -2292是违反一致性约束的错误代码/
6
7日开始删除从部门department_id=v_deptno;
8例外
9当deptno_remaining
10 DBMS_OUTPUT.PUT_LINE(“违反数据完整性约束!”);
11当别人然后
12 DBMS_OUTPUT.PUT_LINE (SQLCODE | |”——“| | SQLERRM);
13结束;
14/deptno
输入值:50
2: v_deptno departments.department_id %类型:=deptno;
新2:v_deptno departments.department_id %类型:=50;
违反数据完整性约束!

  

PL/SQL过程成功完成。
3用户自定义的异常处理
当与一个异常错误相关的错误出现时,就会隐含触发该异常错误。用户定义的异常错误是通过显式使用提高语句来触发。当引发一个异常错误时,控制就转向到异常块异常错误部分,执行错误处理代码。

  

对于这类异常情况的处理,步骤如下:
1。在PL/SQL块的定义部分定义异常情况:

  

& lt;异常情况比;

异常;   

2。提高& lt;异常情况祝辞;

  

3。在PL/SQL块的异常情况处理部分对异常情况做出相应的处理。

  

例1:更新指定员工工资,增加100;
完成声明
2 v_empno员工。employee_id %类型:=empno;
3 no_result例外;
4开始
5更新员工工资=工资+ 100,employee_id=v_empno;
6如果SQL % NOTFOUND
7提高no_result;
8如果;
9异常
10当no_result
11 DBMS_OUTPUT.PUT_LINE(“你的数据更新语句失败了!”);
12当别人然后
13 DBMS_OUTPUT.PUT_LINE (SQLCODE | |”——“| | SQLERRM);
结束14;
15/
为empno输入值:5000
2: v_empno员工。employee_id %类型:=empno;
新2:v_empno员工。employee_id %类型:=5000;
你的数据更新语句失败了!

  

PL/SQL过程成功完成。
4用户定义的异常处理

甲骨文异常错误处理