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

vzgqcmou  于 2022-11-07  发布在  DB2
关注(0)|答案(2)|浏览(282)

如何检查DB2中声明的全局临时表是否存在于当前会话中?
我需要为用户会话创建一次临时表,然后在我的应用程序中,每次执行报表时都能在其中插入行。因此,当报表执行超过第一次时,我需要删除此表中的所有行,然后用新行重新填充它。
现在,创建临时表的方法在第二次执行时抛出42710 SQLSTATE error
此语句是否适用于我的实现:DECLARE CONTINUE HANDLER FOR SQLSTATE '42710' SET DGTT_FOUND=1以及如何在Java中使用它(executeUpdate()?)

gkl3eglg

gkl3eglg1#

根据您的DB2版本(您为了方便而没有指明),可以在声明临时表时使用WITH REPLACE选项,这样做不仅会成功(即使以前已经声明了该表),而且还会删除以前插入的行。

DECLARE GLOBAL TEMPORARY TABLE mytab (
  ...
) NOT LOGGED WITH REPLACE
9q78igpj

9q78igpj2#

由于已声明的临时表未在目录中定义,并且它们仅在当前会话中可见(每个会话可能对同一临时表名有不同的定义),因此您只能尝试查询该表并分析答案。
首先,尝试

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

相关问题