postgresql - Postgresql - 处理来自被调用过程的异常
问题描述
我有一个内置异常处理的主过程(main-procedure)。主过程调用另一个也具有异常处理的过程(子过程)。
在子过程中,我引发了一个异常,我在控制台中看到了错误,但主过程继续进行,就好像什么都没发生一样。它甚至提交事务。
我什至尝试在子过程中插入以下代码(引发通知'%','a'+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;
推荐阅读
- hibernate - 复杂参考情况行为中的休眠逐出级联
- python - ValueError:输入数组应具有与目标数组相同数量的样本。找到 1 个输入样本和 416 个目标样本
- javascript - 通过javascript读取表格单元格
- c# - 有什么方法可以检查 C# dynamics 365 中的探查器模式?
- android - React-Native 未构建
- angular - 如何检查当前哪个组件具有焦点
- c# - cosmos db 中的异步查询
- flutter - 当应用程序在后台时使用 uni_links
- login - JMeter 负载测试 Web 应用程序
- hibernate - 用于第二个 Hibernate 缓存的 Hazelcast 实例无法在 Kubernetes 中稳定连接