ORACLE中异常处理

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填写!

详细请参照官方文档!

原文地址:https://www.cnblogs.com/SEEKTHINKING/p/2541734.html