我有一个使用全局临时表的存储过程。我定义了一个退出处理程序,这样如果过程中的任何地方发生异常,全局表就会被删除。
DECLARE EXIT HANDLER FOR SQLEXCEPTION drop table SESSION.TEMP_ODI_ID_TABLE;此退出处理程序正确地捕获SQL异常,并根据需要删除全局表。但是,SQL异常不会传播,并且我的Java代码不会像没有显式定义退出处理程序时那样捕获SQL异常。我想知道如何更改退出处理程序以删除临时表,同时仍然返回SQL异常,该异常可以由JDBC代码中的catch语句拾取。
谢谢
利亚姆
发布于 2015-08-14 17:41:24
您可以尝试将SIGNAL语句作为退出处理程序的一部分嵌入。这样,您还可以对捕获的SQL异常做出反应。这是指向SIGNAL statement的链接。‘SIGNAL`用于在存储过程中引发错误,例如,您的应用程序可以向应用程序发出检测到的问题的信号,而不会实际遇到SQL错误。
发布于 2015-08-18 18:09:58
我已经通过使用RESIGNAL解决了我的问题,这样SQL异常在被出口处理程序捕获后被传播。我还将实现一些动态SQL,以便RESIGNAL返回我的过程捕获异常的点。我现在申请的“快速”解决方案是:
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
drop table SESSION.TEMP_ODI_ID_TABLE;
RESIGNAL;
END;https://stackoverflow.com/questions/32006707
复制相似问题