从 DB2 存储过程出口处理程序传播默认 SQL 异常
Posted
技术标签:
【中文标题】从 DB2 存储过程出口处理程序传播默认 SQL 异常【英文标题】:Propagate default SQL Exception from DB2 stored procedure exit handler 【发布时间】:2015-08-14 09:26:09 【问题描述】:我有一个使用全局临时表的存储过程。我已经定义了一个退出处理程序,这样如果在我的过程中的任何地方发生异常,全局表就会被删除。
DECLARE EXIT HANDLER FOR SQLEXCEPTION drop table SESSION.TEMP_ODI_ID_TABLE;
此退出处理程序正确捕获 SQL 异常并根据需要删除全局表。但是,SQL 异常不会传播,并且我的 Java 代码不会像未显式定义退出处理程序时那样捕获 SQL 异常。我想知道如何更改退出处理程序以删除临时表,同时仍返回 SQL 异常,该异常可由我的 JDBC 代码中的 catch 语句获取。
谢谢
利亚姆
【问题讨论】:
就像在 Java 中一样,如果你捕获了一个异常并且不重新抛出它,它就不会被传播。 【参考方案1】:您可以尝试嵌入 SIGNAL
语句作为退出处理程序的一部分。这样,您还可以对您捕获的那种 SQL 异常做出反应。这是SIGNAL statement 的链接。 'SIGNAL' 用于在存储过程中引发错误,例如您的应用程序可以向应用程序发出检测到问题的信号,而不会实际遇到 SQL 错误。
【讨论】:
【参考方案2】:我通过使用 RESIGNAL 解决了我的问题,以便 SQL 异常在被退出处理程序捕获后传播。我还将实现一些动态 SQL,以便 RESIGNAL 返回我的过程捕获异常的点。我现在申请的“快速”修复是:
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
drop table SESSION.TEMP_ODI_ID_TABLE;
RESIGNAL;
END;
【讨论】:
以上是关于从 DB2 存储过程出口处理程序传播默认 SQL 异常的主要内容,如果未能解决你的问题,请参考以下文章