ALTER TABLE 表名 MODIFY (字段名 新類型);
-- 例
ALTER TABLE STUDENT MODIFY (ID NUMBER(4));
直接 MODIFY 可能因類型不兼容報錯,採用「重命名舊列 → 新建同名列 → 數據遷移 → 刪除舊列」四步法:
-- 1. 重命名原字段
ALTER TABLE 表名 RENAME COLUMN 字段名 TO 字段名_OLD;
-- 2. 新建同名字段 (目標類型)
ALTER TABLE 表名 ADD 字段名 VARCHAR2(30);
-- 3. 顯式轉換遷移數據 (關鍵:Oracle 不像 SQL Server 支援隱式轉換)
UPDATE 表名 SET 字段名 = CAST(字段名_OLD AS VARCHAR2(30));
-- 4. 刪除備份列
ALTER TABLE 表名 DROP COLUMN 字段名_OLD;
DBMS_REDEFINITION 在線重定義避免鎖表DISABLE 相關約束,修改完再 ENABLEUPDATE 會報錯-- 1. 創建中間表 (新結構)
CREATE TABLE TABLE_INT AS SELECT * FROM TABLE_ORI WHERE 1=2;
-- 修改中間表結構至目標狀態
-- 2. 啟動重定義
EXEC DBMS_REDEFINITION.START_REDEF_TABLE('SCHEMA','TABLE_ORI','TABLE_INT');
-- 3. 同步增量 (可重複執行)
EXEC DBMS_REDEFINITION.SYNC_INTERIM_TABLE('SCHEMA','TABLE_ORI','TABLE_INT');
-- 4. 完成切換 (極短鎖定)
EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE('SCHEMA','TABLE_ORI','TABLE_INT');
適用 24x7 業務零停機變更,企業級推薦做法。