PLSQL开发经常需要用到异常处理(exception)来做一些逻辑处理或者规避一些异常情况,PLSQL中专门有一个异常处理模块的语法来处理这个事情。
异常可以分成几类:
1.可以预期的数据错误
开发人员已经预料到自己的程序中可能发生的错误,比如主键重复、除数为0等,此时用异常处理来捕捉这些错误,并进行相应的处理,规避或者纠正错误。
2.不可预期的错误
开发人员并没有预料到的一些错误,比如应用程序端做了些变更,输入的数据规范与之前约定的不一致,从而导致之前并未主动捕捉的一些错误。
这种情况可以用exception when others来捕捉,建议把上下文相关的数据做日志,以便查找错误原因。
此时如果需要程序终止,则添加raise语句;如希望程序忽略错误,则不做raise处理即可。比如下面是一个比较常见的异常处理模块:
3.可以预期的逻辑错误
有些时候,数据本身并没有问题,但是从业务角度来看确实个错误数据。比如我们采集一个人的身份证号码,如果位数不是15或18位,那肯定是有问题的,又或者号码中的出生日期解析出来是1800年,估计也不正常。
这些错误可以定义为自定义异常,ORACLE中开放了-20000到-20999的错误代码作为自定义异常代码用开发人员使用。
在过程模块中可以用RAISE_APPLICATION_ERROR语句引发异常,比如下面的例子。
运行中结果中,就会出现ORA-20000的自定义异常提示
注意:
1.RAISE只能存在于exception代码块内部,在主程序中应该使用RAISE_APPLICATION_ERROR来引发异常。
2.不要写exception when others then null; 这样的语句,这样就忽略了所有未知错误。