首页 > 解决方案 > Postgresql - 处理来自被调用过程的异常

问题描述

我有一个内置异常处理的主过程(main-procedure)。主过程调用另一个也具有异常处理的过程(子过程)。

在子过程中,我引发了一个异常,我在控制台中看到了错误,但主过程继续进行,就好像什么都没发生一样。它甚至提交事务。

我什至尝试在子过程中插入以下代码(引发通知'%','a'+1),看看这是否会导致主过程停止处理。我确实导致了一个错误,但主要程序继续执行所有剩余步骤,包括提交事务。

我到处寻找答案,但找不到任何告诉我如何从另一个过程中调用的过程中捕获异常的东西。

先感谢您。

标签: postgresqlexceptionstored-procedures

解决方案


“捕获异常”意味着您处理错误情况,然后正常进行。所以如果你在子过程中捕获了一个异常,主过程中不会有任何异常,因为错误条件已经被处理了。

如果您希望异常传播到主过程,请不要在子过程中处理它。

也可以处理子过程中的错误,然后再次引发它,以便它传播到主过程。在 PL/pgSQL 中看起来像

BEGIN
   /* code that might throw errors */
EXCEPTION
   WHEN some_error_condition THEN
      /* code to handle the error */
      RAISE;  -- re-throw the same error
END;

推荐阅读