/*
想對刪除的資料同時做搬移,但是以下語法一直有錯
INSERT INTO TEST2
SELECT * FROM OLD TABLE
(DELETE FROM TEST WHERE COL1 = 'twn-2');
Server Msg: -20165, State: 428FL, [IBM][CLI Driver][DB2/NT]
SQL20165N 不容許 FROM 子句內的 SQL 資料變更陳述式位在指定它的環境定義中。
SQLSTATE=428FL
但是山不轉,路轉。如果我用 EXPORT/LOAD 呢?
*/
/* 建立測試 Tables & Data */
Create Table TEST
(
COL1 CHAR(5),
COL2 CHAR(2),
COL3 CHAR(12)
) IN USERSPACE1
INSERT INTO TEST VALUES ('kor-1','dv','200706231040');
INSERT INTO TEST VALUES ('kor-1','dv','200706231045');
INSERT INTO TEST VALUES ('kor-1','dv','200706231050');
INSERT INTO TEST VALUES ('kor-1','cu','200706231055');
INSERT INTO TEST VALUES ('kor-1','cu','200706231055');
INSERT INTO TEST VALUES ('kor-1','rv','200706220450');
INSERT INTO TEST VALUES ('kor-1','rv','200706220450');
INSERT INTO TEST VALUES ('kor-1','rv','200706220450');
INSERT INTO TEST VALUES ('kor-1','rv','200706220453');
INSERT INTO TEST VALUES ('twn-2','dv','200706220454');
-- TEST2 存放從 TEST 刪掉的資料
CREATE TABLE TEST2 LIKE TEST IN USERSPACE1;
/* DML都失敗,改測 EXPORT/LOAD */
C:\>db2 declare cur cursor for select * from old table (delete from test where c
ol1 = 'twn-2')
DB20000I SQL 指令已順利完成。
C:\>db2 load from cur of cursor insert into test2
SQL3501W 由於禁止資料庫向前回復, 所以表格常駐的表格空間將不放入備份懸置狀態。
SQL1193I 公用程式正在開始從 SQL 陳述式 " select * from old table (delete from
test where col1 = 'twn-2')" 載入資料。
SQL3500W 公用程式在 "2009-09-30 15:52:19.926580" 時開始 "LOAD" 階段。
SQL3519W 開始載入「一致點」。輸入記錄數 = "0"。
SQL3520W 成功載入「一致點」。
SQL3110N 公用程式已完成處理。自輸入檔讀取第 "1" 列。
SQL3519W 開始載入「一致點」。輸入記錄數 = "1"。
SQL3520W 成功載入「一致點」。
SQL3515W 公用程式已在 "2009-09-30 15:52:20.295444" 時完成 "LOAD" 階段。
已讀取的列數 = 1
已略過的列數 = 0
已載入的列數 = 1
已拒絕的列數 = 0
已拒絕的列數 = 0
已確定的列數 = 1
/* 看一下資料是否 LOAD 到 TEST2 去 */
C:\>db2 select * from test2
COL1 COL2 COL3
----- ---- ------------
twn-2 dv 200706220454
已選取 1 個記錄。