--异常处理
--预定义异常
--实验no-data-found异常
--EXCEPTION,放在执行块的最下面
--WHEN 异常信息 THEN
--发生该异常的处理代码;
--WHEN 异常信息 THEN
--发生该异常的处理代码;
--WHEN OTHERS THEN 概括了除以上异常列表外的所有异常
--dbms_output.put_line('发生未知异常');
DECLARE
rec_emp emp%ROWTYPE;
BEGIN
SELECT * INTO rec_emp FROM emp WHERE empno = 123;
dbms_output.put_line('end');
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line('找不到数据');
WHEN OTHERS THEN
dbms_output.put_line('发生未知异常');
END;
--非预定义异常的处理
--获取异常的代码 12/0这个异常的代码 -1476
--定义一个异常,将这个异常与异常代码联系起来。
--像处理预定义异常一样,处理它
--获取异常代码:sqlcode变量,获取异常信息:sqlerrm变量
DECLARE
num NUMBER;
excp_zero EXCEPTION;
PRAGMA EXCEPTION_INIT(excp_zero, -1476);
BEGIN
SELECT 12 / 0 INTO num FROM dual;
dbms_output.put_line(num);
EXCEPTION
WHEN excp_zero THEN
dbms_output.put_line('不能除以0');
END;
--自定义异常:处理一些本来没有错,但是不符合具体环境的情况
DECLARE
num NUMBER;
excp_sal EXCEPTION;
BEGIN
num := &sal;
IF (num <= 0) THEN
RAISE excp_sal;
END IF;
UPDATE emp SET sal = sal + num;
EXCEPTION
WHEN excp_sal THEN
dbms_output.put_line('扣工资是不好的行为');
END;
--另一种自定义异常的方式
--定义异常的代码,信息
--自定义的异常代码范围(20000-20999)
DECLARE
num NUMBER;
BEGIN
num := &sal;
IF (num <= 0) THEN
RAISE_application_error(-20000,'工资涨幅太低');
END IF;
UPDATE emp SET sal = sal + num;
EXCEPTION
WHEN others THEN
dbms_output.put_line(sqlerrm);
END;
Oracle异常处理举例
最新推荐文章于 2022-06-16 19:19:56 发布