如何在当前会话中检查DB2中是否存在已声明的全局临时表?
我需要为用户会话创建一次临时表,然后在我的应用程序的情况下每次执行报表时都能在其中插入行。因此,当报表执行超过第一次时,我需要删除此表中的所有行,然后使用新行重新填充它。
现在,创建临时表的方法是在第二次执行时抛出42710 SQLSTATE error
。
此声明是否适用于我的实现:DECLARE CONTINUE HANDLER FOR SQLSTATE '42710' SET DGTT_FOUND=1
以及如何在Java中使用它(executeUpdate()
?)
答案 0 :(得分:3)
根据您不方便指出的DB2版本,您可以在声明临时表时使用WITH REPLACE
选项,这不仅会成功,即使表已事先声明,但也会照顾删除以前插入的行。
DECLARE GLOBAL TEMPORARY TABLE mytab (
...
) NOT LOGGED WITH REPLACE
答案 1 :(得分:0)
因为在目录中没有定义声明的临时表,并且它们只在当前会话中可见(每个会话可能具有相同临时表名称的不同定义),所以您只能尝试查询表并分析答案。
首先,试试
select count(0) from session.myTempTable
如果DB2说它不存在,那么你可以定义一个新表。
如果DB2说它存在,你可以创建它或删除它,以便重新创建它。我认为这是你的情况,因为你有一个SQL状态42710,那么你可以为你的代码创建一个处理程序。
但是,处理程序可以在SQL过程中使用,因此您应该创建一个SP,在查询之前调用它。该SP将检查该表是否存在,并且当它存在时以及何时不存在时,您将放置您想要执行的操作。
参考文献: