gpt4 book ai didi

db2 - 什么时候 DB2 声明的全局临时表会自动删除...?

转载 作者:行者123 更新时间:2023-12-04 13:18:06 25 4
gpt4 key购买 nike

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

今天我开始尝试使用 DGTT,感谢 this answer .到目前为止,我对这些功能很满意,尽管我确实发现我们较新的系统版本具有 WITH DATA 选项,这是一个明显的优势。

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

SQL 错误 [42710]:[SQL0601] QTEMP 类型 *FILE 中的 NEW_PKG_SHEETS_DATA 已存在。

错误的意思很明显,但时机不对。当我今天开始时,我可以多次运行查询,并且没有发生错误。好像系统正在清理并删除它,这正是我正在寻找的。但后来错误开始了,现在它发生得更频繁了。

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

IBM article about DGTTs讲了很多 session ,但没有很多细节。和 this article可能是我在 IBM 文档中遇到的最长的命令语法。我通过了它,但它没有回答什么决定何时删除 DGTT 的问题。

所以我想问一下:

session 的边界​​是什么……?

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

我想最好/最安全的做法是根据需要使用 DROP TABLE..?

有没有人可以分享任何提示、技巧或建议......?

下面是我正在开发的 SQL。为简洁起见,我排除了 WITH-ASSELECT 语句的 block :

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 ;

最佳答案

只有当连接成功结束时,DGTT 才会被 Db2 自动清除(connect reset 或根据正在使用的 Db2 的任何接口(interface)等价物)。

对于 Db2 for i 和 Db2-LUW,请考虑对 DECLARE GLOBAL TEMPORARY TABLE 语句使用 WITH REPLACE 子句。如果 session 保持打开状态,这将确保您不需要显式删除 DGTT,但无论 DGTT 是否已存在,代码都需要在下次执行时替换表。

使用 WITH REPLACE 子句意味着您无需担心为 DGTT 发出 DROP 语句,除非您真的想发出 drop。

有时 session 可能会被重新使用,或者关闭/断开连接可能不会发生或可能不会完成,或者更可能是工作站执行重试,在这些情况下 WITH REPLACE 可能是必不可少的轻松避免运行时错误。

请注意,Db2 for Z/OS(v12)不为 DGTT 提供 WITH REPLACE 子句,而是提供可选语法 on commit drop table(但是对于 Db2-for-i 和 Db2-LUW,这没有记录)。

关于db2 - 什么时候 DB2 声明的全局临时表会自动删除...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57715694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com