DB2 執行 SQL 腳本時,建議在腳本開頭加入分號 ; 作為陳述式分隔符,避免解析錯誤。以下提供結構變更常用範本,db2inst1 為 Schema 名稱,請依實際環境替換。
; -- 腳本開始,強制分隔符 -- 刪除欄位 ALTER TABLE db2inst1.student DROP COLUMN age; -- 修改欄位長度/型別 ALTER TABLE db2inst1.student ALTER COLUMN name SET DATA TYPE VARCHAR(100); -- 新增欄位 ALTER TABLE db2inst1.student ADD COLUMN class VARCHAR(30); ; -- 腳本結束
db2 -tvf script.sql)時,若腳本第一行非分號,首條陳述式可能解析失敗。慣例在腳本最前面加 ;。db2inst1.student 明確指定 Schema,避免隱含解析錯誤(特別在多 Schema 環境)。SET DATA TYPE 僅允許相容轉換(如 VARCHAR(50) → VARCHAR(100)、INT → BIGINT),不相容型別需建立新欄位遷移資料後再切換。DROP COLUMN 為線上操作(DB2 9.7+),但會鎖定表格,大表建議維護窗口執行。;
-- 1. 新增多欄位
ALTER TABLE db2inst1.employee
ADD COLUMN hire_date DATE,
ADD COLUMN dept_code SMALLINT,
ADD COLUMN status CHAR(1) DEFAULT 'A';
-- 2. 修改欄位精度
ALTER TABLE db2inst1.employee
ALTER COLUMN salary SET DATA TYPE DECIMAL(12,2);
-- 3. 刪除廢棄欄位
ALTER TABLE db2inst1.employee
DROP COLUMN old_flag;
-- 4. 重組並更新統計 (建議緊接執行)
CALL SYSPROC.ADMIN_CMD('REORG TABLE db2inst1.employee');
CALL SYSPROC.ADMIN_CMD('RUNSTATS ON TABLE db2inst1.employee AND INDEXES ALL');
執行後記憶體 REORG 回收空間、RUNSTATS 更新統計,確保優化器擁有最新資訊。