簡體   English   中英

臨時表不存儲更新的值

[英]Temp table doesn't store updated values

我一直在嘗試創建一個臨時表並對其進行更新,但是當我 go 查看臨時表時,它沒有顯示任何更新的行

declare global temporary table hierarchy (
code varchar(5)
description varchar(30);

INSERT INTO session.hierarchy
SELECT code, 30_description
FROM table1
WHERE code like '_....';

SELECT *
FROM session.hierarchy;

這是一個經常被問到的問題。

將 DGTT 與 Db2(聲明全局臨時表)一起使用時,您需要知道默認是在COMMIT操作后丟棄所有行。 這就是插入后表看起來為空的原因 - 如果啟用了自動提交,行將被刪除。 如果這不是您想要的,您應該在聲明表時使用on commit preserve rows子句。

在創建存儲過程的時候, with replace選項也很重要,這對於開發和測試來說往往是最友好的,並不是默認的。 否則,如果相同的 session 嘗試重復 DGTT 的聲明,則第二次和后續嘗試將失敗,因為 DGTT 已經存在。

有時on rollback preserve rows使用問題確定也很有趣,但這種情況不太常用。

使用 DGTT 時,主要優點之一是您可以安排取消記錄表的填充(插入、更新),如果您有數百萬行要添加到 DGTT,這可以極大地提高性能。

因此建議是:

declare global temporary table ... (   )...
not logged
on commit preserve rows
with replace;

對於 DPF 安裝,還可以考慮使用distribute by hash (...)獲得最佳性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM