oracle中的异常
1、演示一个异常,例如除数为0的异常(10除以0)
DECLARE
str1 number :=10;
BEGIN
str1 := 10/0 ;
DBMS_OUTPUT.PUT_LINE(str1);
END;
2、运行的时候报错,提示错误信息:第四行除数等于0。在四则运算中除数为0是不允许的,无意义。
3、在上述异常中。由于其他原因又不能排除掉除数为0的信息,则可以对这些异常进行捕捉:
EXCEPTION
WHEN exception1 [or exception2....] THEN
statement1 [statement12...]...
[
WHEN exception3 [or exception4....] THEN
statement3 [statement14...]...
]
4、注释:
EXCEPTION:声明异常块的部分
WHEN :后面接exception1 为异常名称列表,如果发生异常与exception1 匹配是,则执行THEN后面的statement1
5、则上述例子中可以改为
DECLARE
str1 number :=10;
BEGIN
str1 := 10/0 ;
DBMS_OUTPUT.PUT_LINE(str1);
EXCEPTION
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE('除数为0,默认用1代替,结果为'||10/1);
END;
6、上诉语句中,单除数为0时系统自动抛出异常,被EXCEPTION异常块中的ZERO_DIVIDE 所捕捉,匹配成功后则输出相应的语句
7、oracle中为每一个错误提供一个错误号和对应的异常名称,oracle中已经定义了一些定义好的常用异常名称,上诉除数为0的异常名称是oracle已经定义好的
8、以上为常用的异常错误号和名称,但oracle中不止是这些,可以利用sql语句查询
SELECT * FROM DBA_SOURCE WHERE NAME='STANDARD' AND TEXT LIKE '%EXCEPTION_INIT%'