DB2声明的全局临时表在什么时候自动删除。。。?

DB2声明的全局临时表在什么时候自动删除。。。?,db2,db2-400,Db2,Db2 400,DB2何时声明全局临时表“清理”并由系统自动删除。。。?这适用于AS400 v7r3m0上的DB2,DBeaver 5.2.5作为开发客户机,MS Access 2007用于最终用户的打包应用程序 今天我开始试验DGTT,多亏了。到目前为止,我对该功能感到满意,尽管我确实发现我们较新的系统版本具有with DATA选项,这是一个明显的优势 一切正常,但有时我会收到以下错误: SQL错误[42710]:[SQL0601]QTEMP type*文件中的新\u包装\u图纸\u数据已存在 错误的意义是显

DB2何时声明全局临时表“清理”并由系统自动删除。。。?这适用于AS400 v7r3m0上的DB2,DBeaver 5.2.5作为开发客户机,MS Access 2007用于最终用户的打包应用程序

今天我开始试验DGTT,多亏了。到目前为止,我对该功能感到满意,尽管我确实发现我们较新的系统版本具有with DATA选项,这是一个明显的优势

一切正常,但有时我会收到以下错误:

SQL错误[42710]:[SQL0601]QTEMP type*文件中的新\u包装\u图纸\u数据已存在

错误的意义是显而易见的,但时间却不是。当我今天开始的时候,我可以多次运行查询,并且没有发生错误。似乎系统正在清理和删除它,这正是我所寻找的。但是错误开始了,现在发生的频率更高了

如果我策略性地使用DROP TABLE,这将解决错误,除非该表不存在,在这种情况下,我会得到另一个错误。正如我所期望的那样,我还可以从我的sqldev客户端断开/重新连接到服务器,因为这肯定会中断会话

这说明了很多课程,但没有太多细节。这可能是我在IBM文档中遇到的最长的命令语法。我通过了它,但它没有回答当DGTT被删除时决定什么的问题

因此,我想问:

会话的边界是什么

我想这可能是由我的SQL客户机中的环境定义的

我想最好/最安全的方法是根据需要使用升降台

有没有人有什么可以分享的技巧、窍门或指点

下面是我正在开发的SQL。为简洁起见,我排除了WITH-AS和SELECT语句的部分:

DROP TABLE SESSION.NEW_PKG_SHEETS ; 

DECLARE GLOBAL TEMPORARY TABLE SESSION.NEW_PKG_SHEETS_DATA

    AS  (   WITH        FIRSTDAY AS (SELECT (YEAR(CURDATE() - 4 MONTHS) * 10000) + 
                                            (MONTH(CURDATE() - 4 MONTHS) * 100) AS DATEISO
                                     FROM   SYSIBM.SYSDUMMY1
            -- <VARIETY OF ADDITIONAL CTE CLAUSES>
            -- <SELECT STATEMENT BELOW IS A BIT LONGER>
            SELECT      DAACCT                                      AS DAACCT,
                        DAIDAT                                      AS DAIDAT,
                        DAINV#                                      AS DAINV,
                        CAST(DAITEM AS NUMERIC(6))                  AS DAPACK,
                        CAST(0 AS NUMERIC(14))                      AS UPCNUM,
                        DAQTY                                       AS DAQTY
            FROM        DAILYTRANS
            AND         DAIDAT >= (SELECT DATEISO+000 FROM FIRSTDAY)                -- 1ST DAY FOUR MONTHS AGO
            AND         DAIDAT <= (SELECT DATEISO+399 FROM FIRSTDAY)                -- LAST DAY OF LAST MONTH
    ) WITH DATA ;

DROP TABLE SESSION.NEW_PKG_SHEETS ; 

只有当连接成功结束时,根据使用的Db2接口,DGTT才会被Db2自动清除

对于DB2和DB2LUW,请考虑使用EngRead子句来声明全局临时表语句。这将确保如果会话保持打开状态,则无需显式删除DGTT,但无论DGTT是否已存在,代码都需要在下次执行时替换该表

使用WITH WITH REPLACE子句意味着您不需要担心为DGTT发出DROP语句,除非您确实想要发出DROP语句

有时会话可能会被重复使用,或者关闭/断开连接可能不会发生或可能无法完成,或者更可能是工作站执行重试,在这些情况下,替换对于轻松避免运行时错误非常重要


请注意,DB2forz/OS在v12上没有为DGTT提供WITH REPLACE子句,而是在commit drop table上提供了一个可选语法,但这在Db2-for-i和DB2LUW中没有记录。

书的右边有一章叫做RightfrontMyFace。谢谢,这很好用=-请注意,DB2forLUW或DB2forz/OS上的用户:在定义的末尾将有一个oncommitdrop表。