【问题标题】:Postgresql - processing exceptions from called proceduresPostgresql - 处理来自被调用过程的异常
【发布时间】:2021-03-12 00:09:38
【问题描述】:

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

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

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

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

提前谢谢你。

【问题讨论】:

    标签: postgresql exception stored-procedures


    【解决方案1】:

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

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

    也可以处理子过程中的错误,然后再次引发它,以便它传播到主过程。在 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;
    

    【讨论】:

    • 谢谢。这就是问题所在。我在从属程序中提出通知
    猜你喜欢
    • 2011-04-07
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 2010-12-09
    • 2011-09-01
    • 1970-01-01
    相关资源
    最近更新 更多