CREATE SUMMARY TABLE tbl_name AS (SELECT * FROM tbl1 WHERE col1='AAA')
DATA INITIALLY DEFERRED REFRESH DEFERREDDATA INITIALLY DEFERRED:建立時不載入資料;REFRESH DEFERRED:以 REFRESH TABLE 手動重新整理。REFRESH TABLE sum_tableALTER TABLE sum_table ...DECLARE GLOBAL TEMPORARY TABLE tbl_name
AS (FULLSELECT) DEFINITION ONLY
EXCLUDING IDENTITY COLUMN ATTRIBUTES
ON COMMIT DELETE ROWS
NOT LOGGEDDECLARE GLOBAL TEMPORARY TABLE DEC_BSEMPMS AS (SELECT * FROM BSEMPMS) DEFINITION ONLY EXCLUDING IDENTITY COLUMN ATTRIBUTES ON COMMIT DELETE ROWS NOT LOGGEDCREATE VIEW view_name AS SELECT * FROM table_name WHERE ...DROP VIEW view_nameSELECT TEXT FROM SYSCAT.VIEWSCREATE ALIAS alias_name FOR obj_name(obj 可為 TABLE、VIEW、ALIAS、NICKNAME)CREATE SEQUENCE seq_name
START WITH start_num
INCREMENT BY 1
NO MAXVALUE
NO CYCLE
CACHE max_valuesALTER SEQUENCE seq_name ...(可改 START、INCREMENT、MAXVALUE、CYCLE、CACHE)DROP SEQUENCE seq_name(NUM_MON_APPS+1)*(NUM_DBS*(800+(NUM_TABLES_ACCESSED*20)) + (NUM_APPS_CONNECTED+1)*(200+(NUM_TABLESPACES*100))) / 4096MON_HEAP_SZ 控制。CREATE EVENT MONITOR tablemon FOR TABLES WRITE TO FILE 'D:\TEMP'SET EVENT MONITOR tablemon STATE 1SET EVENT MONITOR tablemon STATE 0SELECT EVMONNAME, EVENT_MON_STATE(EVMONNAME) FROM SYSCAT.EVENTMONITORSDROP EVENT MONITOR tablemon| 步驟 | UNIX | Windows |
|---|---|---|
| 1. 定義監控器 | CREATE EVENT MONITOR stmb2 FOR STATEMENTS WRITE TO PIPE '/tmp/evpipe1' | CREATE EVENT MONITOR stmb2 FOR STATEMENTS WRITE TO PIPE '\\.\pipe\evpipe1' |
| 2. 建立管道 | mkfifo 指令或函式 | CreateNamedPipe() 函式 |
| 3. 開啟管道 | open() | ConnectNamedPipe() 或 db2evmon -db sample -evm stmb2 |
| 4. 啟用監控器 | SET EVENT MONITOR stmb2 STATE 1 | |
| 5. 讀取資料 | read() | ReadFile() |
| 6. 停用 | SET EVENT MONITOR stmb2 STATE 0 | |
| 7. 關閉 | close() | DisconnectNamedPipe() |
| 8. 刪除 | unlink() | CloseHandle() |
| 需求 | Oracle | DB2 |
|---|---|---|
| ROWNUM | ROWNUM() | ROW_NUMBER() OVER() |
| 錯誤代碼說明 | — | db2 ? SQLCODE |
| VARCHAR→INTEGER | TO_NUMBER | CAST() |
| INTEGER→VARCHAR | TO_CHAR | CHAR() |
| VARCHAR→DATE | TO_DATE | DATE() |
| DATE→VARCHAR | TO_CHAR | CHAR() |
| NVL | NVL(a,b) | COALESCE(a,b) 或 VALUE(a,b) (需同型別) |
| DUAL 表 | DUAL | SYSIBM.SYSDUMMY1 |
| 快照/實體化視圖 | Materialized View | SUMMARY TABLE |
DB2 採標準 SQL:LEFT/RIGHT/FULL OUTER JOIN ... ON,無 Oracle (+) 符號。
-- 內連接
SELECT * FROM db2admin.bsempms INNER JOIN db2admin.bsdptms ON bsempms.dpt_no=bsdptms.dpt_no;
-- 右外連接
SELECT * FROM db2admin.bsempms RIGHT OUTER JOIN db2admin.bsdptms ON bsempms.dpt_no=bsdptms.dpt_no;
-- 左外連接
SELECT * FROM db2admin.bsempms LEFT OUTER JOIN db2admin.bsdptms ON bsempms.dpt_no=bsdptms.dpt_no;
-- 全外連接
SELECT * FROM db2admin.bsempms FULL OUTER JOIN db2admin.bsdptms ON bsempms.dpt_no=bsdptms.dpt_no;
DB2 LIKE 後僅支援常數、特殊暫存器、主機變數、純量函數、串接運算式,不支援直接欄位參考。
實測環境:PK、Unique Index、Normal Index、No Index 四種情境,隔離級別 RR/RS。
| PK | Unique Idx | Normal Idx | No Index | |
|---|---|---|---|---|
| WITH RR | 鎖列 | 鎖列 | 不鎖列/不鎖表1 | 鎖列/鎖表 |
| WITH RS | 鎖列 | 鎖列 | 鎖列 | 鎖列/鎖表2 |
1 普通索引在 RR 下不鎖列不鎖表,原因待深入研究。
2 RS 掃描全表時會鎖表,類似 RR 行為。
SELECT * FROM (
SELECT col1, col2, col3, ROW_NUMBER() OVER(ORDER BY sort_col ASC) AS rn
FROM table_name
) AS a1 WHERE a1.rn BETWEEN 10 AND 20;