0

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

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

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

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

4

2 回答 2

4

根据您方便地未指明的 DB2 版本,您可以WITH REPLACE在声明临时表时使用该选项,即使先前已声明该表,这不仅会成功,而且还会删除先前插入的行。

DECLARE GLOBAL TEMPORARY TABLE mytab (
  ...
) NOT LOGGED WITH REPLACE
于 2013-07-04T12:06:15.060 回答
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

于 2013-07-04T10:28:14.773 回答