Oracle Exception

一个完整的程序肯定是要包括异常处理,在pl/sql里异常处理包括哪些?又是如何控制和处理异常处理?

1. 异常处理分类

   1.1 内部异常

    每当PL/SQL违背了ORACLE原则或超越了系统依赖的原则就会隐式的产生内部异常。有以下几个常用的异常:

   >1. no_data_found

     select into 语句没有符合条件的记录返回,如 select bc.company_name into l_name from bf_customers bc where bc.cust_id = p_cust_id;如果p_cust_id 不存在表cust_id中,则没有值返回,程序抛出no data found异常。

   >2. too_many_rows 

      select into 语句符合条件的记录有多条返回

   >3. dup_val_on_index

      对于数据库表中的某一列,该列已经被限制为唯一索引,程序试图存储两个重复的值

   >4. value_error

     在转换字符类型,截取或长度受限时,会发生该异常,如一个字符分配给一个变量,而该变量声明的长度比该字符短,就会引发该异常

   >5.storage_error

     内存溢出

   >6.zero_divide

     除数为0

   1.2 用户自定义异常

     在声明出声明自己定义的异常,

     如l_exception   EXCEPTION;

     if A is null then

            raise l_exception;

     end if;

2. 异常处理的解决方法

    2.1 异常抛出

        异常抛出有三种方式:1. 通过PL/SQL运行时引擎 2. 使用RAISE语句 3.调用RAISE_APPLICATION_ERROR存储过程

    2.2 异常处理

     EXCEPTION
          WHEN inventory_too_low THEN
  order_rec.staus:='backordered';
  replenish_inventory(inventory_nbr=>
  inventory_rec.sku,min_amount=>order_rec.qty-inventory_rec.qty);
  WHEN discontinued_item THEN
  --code for discontinued_item processing
  WHEN zero_divide THEN
  --code for zero_divide
  WHEN OTHERS THEN
  --code for any other exception

3. 异常注意事项

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值