我有一个使用全局临时表的存储过程。我已经定义了一个退出处理程序,以便如果在我的过程中的任何地方发生异常,则删除全局表。
DECLARE EXIT HANDLER FOR SQLEXCEPTION drop table SESSION.TEMP_ODI_ID_TABLE;
此退出处理程序正确捕获SQL异常并根据需要删除全局表。但是,SQL异常不会传播,并且我的Java代码不会像未明确定义退出处理程序时那样捕获SQL异常。我想知道如何更改退出处理程序以删除临时表,同时仍然返回SQL异常,这可以通过我的JDBC代码中的catch语句获取。
由于
利安
答案 0 :(得分:2)
您可以尝试将SIGNAL
语句作为退出处理程序的一部分嵌入。这样你就可以对你正在捕获的SQL异常做出反应。这是SIGNAL statement的链接。 'SIGNAL`用于在存储过程中引发错误,例如您的应用程序可以向应用程序发出检测到的问题,而不会实际遇到SQL错误。
答案 1 :(得分:0)
我已经通过使用RESIGNAL解决了我的问题,以便在被退出处理程序捕获后传播SQL异常。我还将实现一些动态SQL,以便RESIGNAL返回我的过程捕获异常的点。 "快速"修复我现在申请的是:
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
drop table SESSION.TEMP_ODI_ID_TABLE;
RESIGNAL;
END;