OceanBase 推荐只在下列情形里使用异常处理程序:

    • 您预计可能有异常,并期望处理它。

      比如说,您预计最终一个 SELECT INTO 语句可能会返回空行,导致 OceanBase上报一个预定义异常 NO_DATA_FOUND 。您期望通过子程序或者 STORED PROCEDURE 块处理这个异常(这不是错误),然后让程序能继续执行下去。

    • 您必须放弃或关闭一个资源。

      比如说:

    1. ...
    2. file := UTL_FILE.OPEN ...
    3. BEGIN
    4. statement statement]...
    5. EXCEPTION
    6. WHEN OTHERS THEN
    7. UTL_FILE.FCLOSE(file); -- then you want to close the file.
    8. RAISE; -- 继续上报异常.
    9. END;
    10. UTL_FILE.FCLOSE(file);
    11. ...
    • 在子程序代码的顶层,您需要记录错误日志。

      比如说:

    1. BEGIN
    2. proc(...); -- 调用其他子程序
    3. EXCEPTION
    4. WHEN OTHERS THEN
    5. log_error_using_autonomous_transaction(...); -- 使用自治事务记录日志
    6. RAISE; -- 继续上抛异常.
    7. END;
    8. /