oracle基础教学:简单的exception处理
的有关信息介绍如下:在数据开发过程用需要异常处理的地方是很多的,良好的异常处理可以给人一个逻辑清楚的过程。如果你对oracle数据开发中异常处理还不是很熟悉或者你还是新手的话,这篇文章将是很有用的!
首先我们要了解一个单词:exception!它是oracle中的异常类型!oracle中预定义了很多的异常情况。但是常用的也不过几种而已!一般的exception都是伴随这个begin和end的。参考下图:
最常用的异常莫过于when no_data_found了。请看下列例子:
declare
n number;
begin
select 1 into n from dual where 1=3;
exception when no_data_found then
dbms_output.put_line('n not found!');
end;
/
还有一种也很常用when too_many_rows。请看下列例子:
declare
n number;
begin
select id into n
from
(
select 1 id from dual
union
select 2 id from dual
);
exception when too_many_rows then
dbms_output.put_line('too many rows found for n');
end;
/
上面只说了两种异常的情况,若碰到一些不知名的异常应该肿么办呢?其实有一个万能的异常情况:when others! 这个others上面异常都能处理!例如上面的no_data_found换成others也是没问题的,只是没有那么具体而已!看下面的例子:
DECLARE
n NUMBER:=2;
m NUMBER;
BEGIN
m:=n/0;
EXCEPTION WHEN OTHERS THEN
Dbms_Output.put_line('Hey man! Divisor is 0!!!');
END;
/
其实可以把多重异常情况写在一起,因为有时候不知道异常是no_data_found,too_many_rows还是others。看看下面例子就容易理解了:
DECLARE
n NUMBER:=2;
m NUMBER;
BEGIN
m:=n/0;
EXCEPTION
WHEN No_Data_Found THEN
Dbms_Output.put_line('Data is not found!');
WHEN Too_Many_Rows THEN
Dbms_Output.put_line('Too many rows round!');
WHEN OTHERS THEN
Dbms_Output.put_line('Hey man! Divisor is 0!!!');
END;
/
运行的结果肯定是:Hey man! Divisor is 0!!!
还可以自己定义exception哦!为什么要自己定义呢?即使人为制造exception,中断程序或者跳出某个程序段。例子如下:
DECLARE
exception1 EXCEPTION;
BEGIN
IF 1!=1 THEN
Dbms_Output.put_line('Normal!');
ELSE
RAISE exception1;
END IF;
EXCEPTION
WHEN exception1 THEN
Dbms_Output.put_line('EXCEPTION!');
WHEN OTHERS THEN
Dbms_Output.put_line('OTHERS EXCEPTION!');
END;
/
输出结果是:EXCEPTION!
因为我人为raise了一个exception,所以程序直接跳到了when exception1 then里面去了。
好了基础的exception就讲到这里吧!好记忆不如烂笔头,多练几次就记得很牢了!