PLSQL中的异常处理

PLSQL 专栏收录该内容
11 篇文章 0 订阅

PLSQL中的异常一般有两种:

1、Oracle 内部错误抛出的异常:这又分为预定义异常(有错误号+常量定义) 和 非预定义例外 (仅有错误号,无常量定义)

2、程序员显式的抛出的异常

处理预定义的例外:有些常见例外,Oracle 都已经预定义好了,使用时无需预先声明,比如:

–NO_DATA_FOUND (没找到数据)

–TOO_MANY_ROWS (列数超过范围)

–INVALID_CURSOR

–ZERO_DIVIDE (被除数不能为0)

–DUP_VAL_ON_INDEX

-VALUE_ERROR (数据赋值错误)

抛出异常:

declare

v_data number;

v_myexp exception; --定义一个异常变量

begin

v_data :=&inputData; --输入数据

if v_data>10 and v_data<100 then

raise v_myexp;

处理异常:

使用exception处理异常:

例如处理被除数为0的异常:

declare

v_result number;

begin

v_result:=10/0;

dbms_output.put_line('异常之后的代码将不再执行!');

exception

when zero_divide then

dbms_output.put_line('被除数不能为0!');

when others then

dbms_output.put_line('其他未知异常');

ROLLBACK;

v_error_code := SQLCODE ;

v_error_message := SQLERRM ;

end;

发生这种情况时,我们还是希望了解当时发生的Oracle错误号和相关描述信息,Oracle 提供了两个内置函数 SQLCODE 和 SQLERRM 分别用来返回Oracle 错误号和错误描述

注意:1.异常之后的代码将不再执行

2.异常可以嵌套

3.异常未处理会往外一层抛出

OTHERS的处理: Others表明我们程序员未能预计到这种错误,所以全部归入到others 里面去了

 

自定义异常:

 

方式一:在声明块中声明exception对象,此方式有两种选择:

1.声明异常对象并用名称来引用它,此方式使用普通的others异常捕获用户定义异常;

2.声明异常对象并将它与有效的Oracle错误代码映射,需要编写单独的when语句块捕获;

例如:

declare

v_data number;

v_myexp exception; --定义一个异常变量

begin

v_data :=&inputData; --输入数据

if v_data>10 and v_data<100 then

raise v_myexp;

end if;

exception

when v_myexp then

dbms_output.put_line('输入数据有错误1');

dbms_output.put_line('sqlcode='||sqlcode);

dbms_output.put_line('sqlerrm='||sqlerrm);

end;

方式二:在执行快中构建动态异常。通过“raise_application_error”函数构建动态异常。在触发动态异常时,可使用-2000到-2999范围的数字。如果使用动态异常,可以在运行时指派错误消息。

declare

v_data number;

v_myexp exception; --定义一个异常变量

begin

v_data :=&inputData; --输入数据

if v_data>10 and v_data<100 then

raise_application_error(-20789,'输入数字不能在10-100之间!');

end if;

exception

when v_myexp then

dbms_output.put_line('输入数据有错误1');

dbms_output.put_line('sqlcode='||sqlcode);

dbms_output.put_line('sqlerrm='||sqlerrm);

 

  • 1
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值