1、预定义异常
语法
BEGIN
sequence_of_statements;
EXCEPTION
WHEN <exception_name> THEN
sequence_of_statements;
WHEN OTHERS THEN
sequence_of_statements;
END;
2、用户自定义异常
步骤
1、在PL/SQL 块的定义部分定义异常情况:<异常情况> EXCEPTION;
2、抛出异常情况:RAISE <异常情况>;
3、在PL/SQL 块的异常情况处理部分对异常情况做出相应的处理。
1、异常输出在控制台
---------------使用用户自定义异常----------------------
DECLARE
v_ename varchar2(10);--员工姓名
v_ename_size number;--姓名长度
VALUE_ERROR EXCEPTION;--定义异常类型
BEGIN
select ename,length(ename) into v_ename,v_ename_size from emp where empno=7788;
dbms_output.put_line('姓名:'|| v_ename || '; 姓名长度:'|| v_ename_size);
IF v_ename_size>3 THEN
RAISE VALUE_ERROR;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('对不起,你查询的用户不存在!');
WHEN VALUE_ERROR THEN
dbms_output.put_line('对不起,姓名长度超过变量长度!');
WHEN others THEN
dbms_output.put_line('对不起,出现其他异常!');
END;
输出:
姓名:SCOTT; 姓名长度:5
对不起,姓名长度超过变量长度!
2、异常窗体显示
语法
RAISE_APPLICATION_ERROR(error_number,error_message);
示例
---------------使用窗体显示异常----------
DECLARE
v_ename varchar2(10);--员工姓名
v_ename_size number;--姓名长度
VALUE_ERROR EXCEPTION;--定义异常类型
BEGIN
select ename,length(ename) into v_ename,v_ename_size from emp where empno=7788;
dbms_output.put_line('姓名:'|| v_ename || '; 姓名长度:'|| v_ename_size);
IF v_ename_size>3 THEN
RAISE VALUE_ERROR;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20001,'对不起,你查询的用户不存在!');
WHEN VALUE_ERROR THEN
RAISE_APPLICATION_ERROR(-20002,'姓名长度超出范围!');
WHEN others THEN
RAISE_APPLICATION_ERROR(-20003,'对不起,出现其他异常!');
END;
输出: