一个完整的程序肯定是要包括异常处理,在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. 异常注意事项