运行时错误可能产生于设计错误、编码错误、硬件故障或其他源头。
OceanBase 数据库有一些预定义异常,会在程序违反数据库规则或者超出系统依赖限制时自动抛出。例如,如果 SELECT INTO 语句没有返回数据行,OceanBase 会上报一个预定义异常 NO_DATA_FOUND 。
不同于预定义异常,用户自定义的异常在条件触发时必须显式的上报。方法是使用 RAISE 语句或者使用 RAISE_APPLICATION_ERROR 方法。举个例子:
子程序的异常处理部分包含一个或多个异常处理程序。一个异常处理程序的语法格式如下:
WHEN OTHERS 异常处理启能够处理所有意外的运行时错误。一旦使用了这个,必须是放在最后一个。示例格式如下:
还有一个替代 WHEN OTHERS 异常处理程序的方法是使用 EXCEPTION_INIT 指示。这个是给STORED PROCEDURE 编译器用的,将一个自定义异常名称跟 OceanBase 错误号关联: