oracle中异常主要分为三类,一类是系统预定义的,就是错误为ORA-xxxxx的那种。
还有就是用户使用RAISE抛出来的异常,这种异常一般是在存储过程或函数内容就自行处理了。
还有就是PARAGMA EXCEPTION_INIT()。
自定义异常:
DECLARE
excep1 EXCEPTION;
BEGIN
...
INSERT...
INSERT INTO A(a,b) VALUES (a1,b1);
RAISE excep1; --人为抛出异常
ROLLBACK;
UPDATE ...
...
EXCEPTION
/*内部处理。这里必须讨论下这里ROLLBACK能否执行的问题。从insert语句报错后,控制直接被转到了这里,所以ROLLBACK以及后面的UPDATE无效,第一个INSERT 在错误处理完后被直接提交了。*/
WHEN excep1 THEN
... --对抛出的异常的处理
WHEN OTHERS THEN
...
END
附:如果没有这里对错误的处理,而是直接将错误抛出,将得到:ORA-06510: PL/SQL: unhandled user-defined exception;那么想自定义这个错误内容怎么办?这就需要使用RAISE_APPLICATION_ERROR了
raise_application_error(error_number, message[, {TRUE | FALSE}]);
error_number介于 -20000 .. -20999之间。
例如:RAISE_APPLICATION_ERROR(-20101,'请确认模板中月份是否按照按格式yyyy-mm填写!');
如果不在存储过程或函数内部处理这个过程,而是直接抛出,将得到:ORA-20101: 请确认模板中月份是否按照按格式yyyy-mm填写!
详细请参照官方文档!