首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 表結構變更完整語法:欄位新增、刪除、修改、重命名

     編輯:Oracle 資料庫相關知識

前言

ALTER TABLE 是 Oracle 資料庫結構變更的核心指令,本文整理欄位層級的四大操作標準語法,適用於 Oracle 10g 以上版本,部分語法符合 ANSI SQL 標準,可跨資料庫參考。

一、修改欄位資料型態或長度

alter table 表名 modify 欄位名 資料型態(長度);

範例:

alter table table_name modify column_name varchar2(10);

注意:

  • 縮小長度時,現有資料長度不得超過新限制,否則報錯
  • 型態變更需相容(如 NUMBER ↔ VARCHAR2 需資料可轉換)
  • 含資料的大表修改可能產生鎖定,建議維護時段執行

二、重命名欄位

alter table 表名 rename column 舊欄位名 to 新欄位名;

範例:

alter table table_name rename column old_column to new_column;

影響範圍: 視圖、PL/SQL 程式、觸發器、索引、外鍵等相依物件不會自動更新,需同步修改應用程式碼。

三、新增欄位

單一欄位

alter table 表名 add(欄位名 資料型態(長度));

範例:

alter table table_name add(one_column varchar2(10));

一次新增多欄位

alter table table_name add(
  one_column varchar2(10),
  two_column number(5),
  three_column date
);

補充: 11g+ 可加 default 值 not null 避免全表更新:

alter table t add (status number(1) default 1 not null);

四、刪除欄位

單一欄位

alter table 表名 drop(欄位名);
-- 或
alter table 表名 drop column 欄位名;

範例:

alter table table_name drop(one_column);

一次刪除多欄位

alter table table_name drop(one_column, two_column, three_column);

效能考量:標記未使用 vs 立即刪除

-- 1. 僅標記未使用(瞬間完成,釋放空間需後續 DROP UNUSED COLUMNS)
alter table table_name set unused column col_name;

-- 2. 真正釋放空間
alter table table_name drop unused columns;

大表刪除欄位建議先 SET UNUSED,維護窗口再 DROP UNUSED COLUMNS,減少鎖定時間。

五、綜合範例:一次交易完成多項變更

alter table emp
  modify (sal number(10,2))           -- 調整薪資精度
  rename column ename to emp_name     -- 重命名
  add (email varchar2(100))           -- 新增信箱
  drop column old_flag;               -- 移除舊旗標

六、最佳實務建議

  1. 變更前先 expdp 匯出結構定義備份
  2. 測試環境驗證應用程式相容性
  3. 大表操作排程在低峰期,監控 V$SESSION_WAIT
  4. 修改後重新收集統計資訊:exec dbms_stats.gather_table_stats('SCHEMA','TABLE')
  5. 記錄變更歷程(版本控管或資料庫變更管理工具)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved