错误处理
能够检测并且进行错误处理的叫做异常,一般分为用户自定义异常,系统预定义异常。
预定义异常
一:除数是0的系统异常 declare v_number Number(2):=10; v_zero Number(2):=0; v_result Number(5); begin --v_number/v_zero,会产生系统异常 v_result:=v_number/v_zero; end;
二:处理上面的异常 declare v_number Number(2):=10; v_zero Number(2):=0; v_result Number(5); begin --v_number/v_zero,会产生系统异常 v_result:=v_number/v_zero; Exception when ZERO_DIVIDE THEN DBMS_OUTPUT.put_line('除数不能为0'); end;
三:多异常处理 declare v_result country.country_name%type; begin select country_name into v_result from country where country_name='BeiJing'; DBMS_OUTPUT.put_line('the country name is '||v_result); exception when TOO_MANY_ROWS then DBMS_OUTPUT.put_line('There is TOO_MANY_ROWS error'); when NO_DATA_FOUND then DBMS_OUTPUT.put_line('There is NO_DATA_FOUND error') END; |
常见的系统预定义异常
1 | DUP_VAL_INDEX | 违反了唯一性 |
2 | LOGIN_DENIED | 用户名或密码错误 |
3 | NO_DATA_FOUND | 没有发现数据 |
4 | TOO_MANY_ROWS | 数据行太多 |
5 | VALUE_ERROR | 算法或转换错误 |
自定义异常
调用自定义异常处理需要使用raise关键字处理
一:自定义异常过程 declare v_overNmber EXCEPTION; --定义异常处理变量 v_salesNumber Number(9); --当前的订单数 v_maxNumber Number(9):=500; --定义允许的最大值 begin --从表中取出数量 select count(*) into v_salesNumber from sales; --比较当前单数和最大的单数的,如果超过最大单数,就进行异常处理 if v_maxNumber<v_salesNumber then --进行异常处理 raise e_overNumber; end if; exception when e_overNumber then DBMS_OUTPUT.put_line('查到的单数超过最大数,数据异常'); end; |