检查当前会话中是否存在声明的全局临时表

时间:2013-07-04 08:01:26

标签: java sql db2 temp-tables

如何在当前会话中检查DB2中是否存在已声明的全局临时表?

我需要为用户会话创建一次临时表,然后在我的应用程序的情况下每次执行报表时都能在其中插入行。因此,当报表执行超过第一次时,我需要删除此表中的所有行,然后使用新行重新填充它。

现在,创建临时表的方法是在第二次执行时抛出42710 SQLSTATE error

此声明是否适用于我的实现:DECLARE CONTINUE HANDLER FOR SQLSTATE '42710' SET DGTT_FOUND=1以及如何在Java中使用它(executeUpdate()?)

2 个答案:

答案 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将检查该表是否存在,并且当它存在时以及何时不存在时,您将放置您想要执行的操作。

参考文献:

句柄 - http://publib.boulder.ibm.com/infocenter/db2luw/v10r1/topic/com.ibm.db2.luw.apdv.sqlpl.doc/doc/c0009025.html

表格 - http://publib.boulder.ibm.com/infocenter/db2luw/v10r1/topic/com.ibm.db2.luw.admin.dbobj.doc/doc/r0054491.html