Oracle PL/SQL开发基础(第二十九弹:异常处理简介)

时间:2021-02-28 11:42:33

异常处理简介

Oracle中的错误可以分为如下两大类:
- 编译时错误:程序在编写过程中出现的错误。PL/SQL引擎在进行编译时会发现这些错误并报告给用户,此时程序还没有完全运行。
- 运行时错误:程序在运行过程中因为各种各样的原因产生的运行时错误。由于这类错误优势难以预料,因此需要异常处理机制来进行处理。

异常处理语法

基本的异常处理结构的PL/SQL包含3个部分:
- 在定义区,定义异常。如果使用预定义异常,则不用再定义区定义异常。
- 在执行区,可以显式地触发异常,也可以有PL/SQL引擎触发异常。
- 只要在执行过程中出现了异常,那么在执行区中后续的语句将立即停止执行,语句执行流程跳转到异常处理区。

看一个典型的异常处理的PL/SQL示例:

DECLARE
e_duplicate_name EXCEPTION; --定义异常
v_ename emp.ename%TYPE; --保存姓名的变量
v_newname emp.ename%TYPE := '史密斯'; --新插入的员工名称
BEGIN
BEGIN --在嵌套块中处理异常
SELECT ename INTO v_ename FROM emp WHERE empno = 7369;

IF v_ename = v_newname
THEN
RAISE e_duplicate_name; --如果产生异常,触发e_duplicate_name异常
END IF;
EXCEPTION
WHEN e_duplicate_name THEN
v_newname:='刘大夏';
END;
--如果没有异常,则执行插入语句
INSERT INTO emp VALUES (7881, v_newname, '职员', NULL, TRUNC (SYSDATE), 2000, 200, 20);
EXCEPTION --异常处理语句块
WHEN OTHERS THEN
DBMS_OUTPUT.put_line('异常编码:'||SQLCODE||' 异常信息:'||SQLERRM);
END;

再看一个示例:

DECLARE
e_outerexception EXCEPTION;
e_innerexception EXCEPTION;
e_threeexception EXCEPTION;
BEGIN
BEGIN
RAISE e_innerexception;
RAISE e_outerexception;
RAISE e_threeexception;
EXCEPTION
WHEN e_innerexception THEN
RAISE e_outerexception;
WHEN e_outerexception THEN
--异常处理代码
WHEN OTHERS THEN
--异常处理代码
END;
EXCEPTION
WHEN e_outerexception THEN
--异常处理代码
END;