Db2

DB2 簡單的按查詢排序

  • June 22, 2020

我對 DB2 很陌生。已經安裝了 Express C 版本,並且在執行簡單查詢時遇到了一些問題。

SELECT A,B,C,D,E,F,G, H  FROM TABLE_NAME 
where A=9999  ORDER BY  D

注意:A通過H是表中唯一的列。當我這樣做時,我得到了這個異常:

DB2 SQL 錯誤:SQLCODE: -1585, SQLSTATE: 54048, SQLERRMC: null 消息:無法創建臨時表,因為沒有具有兼容頁大小的可用系統臨時表空間。

更多例外…

DB2 SQL 錯誤:SQLCODE:-727,SQLSTATE:56098,SQLERRMC:2;-1585;54048;

這只是一個帶有whereandorder by子句的簡單查詢。為什麼我會收到此錯誤?

ORDER BY特別是在 D 列上沒有索引的情況下,將需要排序操作。如果在排序堆中沒有為語句分配足夠的記憶體,則會導致排序到臨時表中的數據溢出。表格寬度將是被排序的結果集的列寬之和,加上一些成本。

必須有一個系統臨時表空間,其頁大小適合容納臨時表寬度,並且錯誤說沒有這樣的表空間。

要創建它,您可以執行以下語句,例如(假設您在數據庫中使用自動儲存):

create system temporary tablespace TMPSYS32 pagesize 32 k

也可能發生您沒有具有該頁面大小的緩衝池(每個表空間必須有一個具有匹配頁面大小的緩衝池)。如果是這樣,您需要先創建緩衝池:

create bufferpool BP32 pagesize 32 k
create system temporary tablespace TMPSYS32 pagesize 32 k bufferpool BP32

引用自:https://dba.stackexchange.com/questions/134109