PL / SQL句柄不是预定义的异常

时间:2016-10-07 19:10:32

标签: oracle plsql

如何处理未预定义的PL / SQL错误?

预定义的例外情况如下:

  • ACCESS_INTO_NULL
  • CASE_NOT_FOUND
  • COLLECTION_IS_NULL
  • CURSOR_ALREADY_OPENED
  • DUP_VAL_ON_INDEX
  • INVALID_CURSOR
  • INVALID_NUMBER
  • NO_DATA_FOUND
  • 产生Program_Error
  • ROWTYPE_MISMATCH
  • 的Storage_Error
  • SUBSCRIPT_BEYOND_COUNT
  • SUBSCRIPT_OUTSIDE_LIMIT
  • SYS_INVALID_ROWID
  • TOO_MANY_ROWS
  • VALUE_ERROR
  • ZERO_DIVIDE

2 个答案:

答案 0 :(得分:4)

您可以使用查看WHEN OTHERS的{​​{1}}异常处理程序。但是,通常最好定义一个可以处理的异常。这将导致更清晰的代码,它允许您将异常名称映射到一个数字,并使用户定义的异常看起来就像预定义的异常。

SQLCODE

答案 1 :(得分:1)

您可以使用以下方法处理预定义之外的错误:

BEGIN
   buggyprocedure; --Call to a procedure that can throw exceptions
EXCEPTION 
   WHEN NO_DATA_FOUND THEN  --Catch predefined exception
      NULL; --Ignore no_data_found
   WHEN OTHERS THEN  --Catch all other exceptions
      IF SQLCODE = -1408 THEN  --Catch error -1408
          NULL; --Ignore this exception
      ELSEIF SQLCODE = -955 THEN --Catch error -955
          anotherprocedure; --Call a different procedure
      ELSE
          RAISE; --Re-raise exception that we are not handling
      END IF;
END;

您基本上捕获所有其他异常,然后使用ifelse语句检查返回的SQLCODE是否是您期望和想要处理的。