ORACLE学习之PL/SQL中异常

PL/SQL处理异常的基本语法

declare


begin

EXCEPTION

WHEN  exception1   [or exception2]   THEN   

statement

WHEN  exception3   [or exception4]    THEN

statement

WHEN OTHERS THEN 

statement

end;


异常类型:

1、预定义异常

ORACLE 本身自己已经定义了号名称的常用异常,Oracle 一共提供了25中预定义异常。

         常用的有:NO_DATA_FOUND、TOO_MANY_ROWS、ZERO_DIVIDE、CASE_NOT_FOUND等

可以通过如下SQL查询ORACLE预定义的25中异常

select * from DBA_SOURCE where name='STANDARD' and text like '%EXCEPTION_INIT%'

2、非预定义异常

Oracle中很多异常都是非预定义的,他们只有错误编号和相关的错误描述,而没有名称的异常是不能被捕获的。

        为了解决这个问题Oracle允许开发人员为这样的异常添加一个名称,使得他们能够被异常处理模块捕获。

示例:

-- Created on 2017/8/2 by ADMINISTRATOR 
declare 
  v_info varchar2(200);
  my_2291_exp EXCEPTION; --声明一个异常
begin
  v_info:='test';
  UPDATE STAFF SET STAFF.WAREA_ID=v_info WHERE STAFF.STAFF_ID=2; --此处修改STAFF一个不存在的部门
  EXCEPTION
    WHEN my_2291_exp THEN
      DBMS_OUTPUT.put_line('违反完整约束条件,未找到父项关键字' );
      DBMS_OUTPUT.put_line(SQLERRM);--异常说明
      DBMS_OUTPUT.put_line(SQLCODE);--异常代码
      ROLLBACK;
end;

3、自定义异常

开发中遇到与业务有关的错误,如数量不能为负数,性别必须是男或者女等。这些不属于系统错误,

        因此不能使用预定义异常和非预定义异常来捕捉它们。

示例:

-- Created on 2017/8/2 by ADMINISTRATOR 
declare 
  -- Local variables here
  test_exp EXCEPTION;
  PRAGMA EXCEPTION_INIT(test_exp,-20001); --错误号范围是 -20999 ~ -20000 之间的整数
begin
  -- Test statements here
  if 1>0 then
    RAISE test_exp; -- 显式抛出异常
  end if;
  EXCEPTION
    WHEN test_exp THEN
      DBMS_OUTPUT.put_line('这里接住异常');
    WHEN OTHERS THEN
      DBMS_OUTPUT.put_line('未找到匹配异常');
end;

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想小叶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值