PL SQL 详细的异常捕获

PL SQL detailed Exception catch

我有一个执行大量插入操作的程序。我遇到了约束违规,但它没有告诉我是哪个插入导致的。我尝试了下面的异常捕获,但没有提供足够的详细信息。

EXCEPTION WHEN OTHERS THEN
  ROLLBACK;
  DBMS_OUTPUT.PUT_LINE('Procedure failed with:  ' || SQLCODE || ' ' || SQLERRM);
  DBMS_OUTPUT.put_line('Error in '|| $$plsql_unit || ' at ' || $$plsql_line);

我一直这样做的方法是将每个插入包装在一个开始异常块中。

所以你最终会得到

Begin
  insert statement here
exception when others then
  dbms_output statements
end;

Begin
  insert statement
exception when others
  dbms_output statements
end.

等等

这允许您为每个插入添加自定义输出,因此您可以 100% 确定哪个插入导致了问题。添加需要一些工作,但最终是值得的,因为它可以为您节省大量调试时间。

希望对您有所帮助。