首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle 調整欄位顯示順序:修改 COL$ 系統表實作

     編輯:Oracle 教學

Oracle 調整欄位顯示順序:修改 COL$ 系統表實作

Oracle 無直接 ALTER TABLE ... MOVE COLUMN 改變欄位順序。若需在工具 (如 PL/SQL Developer) 中調整顯示順序,可直接更新系統表 SYS.COL$ 的 COL# 欄位(內部欄位序號)。操作有風險,需在維護窗口、備份後由 DBA 執行。

操作步驟

  1. 以 SYS 或具備 SELECT ANY DICTIONARY 權限用戶登入。
  2. 查詢目標表的 OBJECT_ID:
    
    SELECT object_id
    FROM all_objects
    WHERE owner = 'FINACE' AND object_name = 'INCOME';
    -- 假設回傳 51221
    
  3. 查詢該表目前欄位序號:
    
    SELECT obj#, col#, name
    FROM sys.col$
    WHERE obj# = 51221
    ORDER BY col#;
    
  4. 更新 COL# 值交換順序(例:將第 3 欄移至第 1 位):
    
    -- 需確保無重複 COL#,建議先將目標欄位改為臨時大數值,再依序重新編號
    UPDATE sys.col$ SET col# = 999 WHERE obj# = 51221 AND name = 'TARGET_COL';
    UPDATE sys.col$ SET col# = 1 WHERE obj# = 51221 AND name = 'TARGET_COL';
    -- 其餘欄位依序遞增...
    COMMIT;
    
  5. 刷新共享池使生效(或重啟實例):
    
    ALTER SYSTEM FLUSH SHARED_POOL;
    

風險與替代方案

  • 風險:直接修改字典表可能導致快取不一致、匯出/匯入異常、升級失敗。Oracle 不保證支援。
  • 正規重建法:
    
    CREATE TABLE new_table AS SELECT col3, col1, col2 FROM old_table;
    DROP TABLE old_table;
    RENAME new_table TO old_table;
    -- 重建索引、約束、授權、同義詞
    
  • 12c+ 隱藏欄位法:ALTER TABLE ... MODIFY (col INVISIBLE) 後再 VISIBLE,順序會移至末尾,配合多次操作可間接調整。

除非極特殊需求 (如舊版報表工具強制依賴欄位順序),強烈建議採用重建表方式,安全可控且符合最佳實踐。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved