OceanBase 推荐只在下列情形里使用异常处理程序:
您预计可能有异常,并期望处理它。
比如说,您预计最终一个 SELECT INTO 语句可能会返回空行,导致 OceanBase上报一个预定义异常 NO_DATA_FOUND 。您期望通过子程序或者 STORED PROCEDURE 块处理这个异常(这不是错误),然后让程序能继续执行下去。
您必须放弃或关闭一个资源。
比如说:
...
file := UTL_FILE.OPEN ...
BEGIN
statement statement]...
EXCEPTION
WHEN OTHERS THEN
UTL_FILE.FCLOSE(file); -- then you want to close the file.
RAISE; -- 继续上报异常.
END;
UTL_FILE.FCLOSE(file);
...
在子程序代码的顶层,您需要记录错误日志。
比如说:
BEGIN
proc(...); -- 调用其他子程序
EXCEPTION
WHEN OTHERS THEN
log_error_using_autonomous_transaction(...); -- 使用自治事务记录日志
RAISE; -- 继续上抛异常.
END;
/