2012-08-30 24 views

回答

3

簡單的答案是,你不能。列總是添加在最後。但是,您不應該關心表中列的順序,因爲您應始終明確列出查詢中的列和DML中的列。你應該總是有一個界面層(例如一個視圖),如果順序很重要,你可以在適當的位置添加新的列。

如果您真的確定了,可以使用新的列順序創建一個新表,將數據移動到新表,刪除舊錶並重命名新表。您需要重新創建表上的所有索引,約束或觸發器。喜歡的東西

ALTER TABLE tb 
    ADD(M NUMBER); 

CREATE TABLE tb_new 
AS 
SELECT a, b, m, c 
    FROM tb; 

DROP TABLE tb; 

ALTER TABLE tb_new 
    RENAME TO tb; 

我不知道它是否是Express Edition中的一個選項(我往往會懷疑它是,但我沒有一個XE數據庫方便的驗證),但你也可能使用DBMS_REDEFINITION package正如芭芭拉在那個例子中展示的那樣在幕後,Oracle正在做與上面所做的基本相同的事情,但增加了一些物化視圖日誌以允許應用程序在操作期間繼續訪問表。

但是,如果你發現自己關心表格中的列順序,那麼最好停下來弄清楚你做錯了什麼,而不是繼續在任何一個路徑上前進。應該是格外罕見的,你會關心表中列的物理順序。

+0

賈斯汀 - 你能給我舉一個罕見的例子,當列的物理順序變得重要嗎? –

+0

@breadbutter - 大多數時候,人們關心的是列的順序,因爲應用程序構建不好。一個精心打造的應用程序可能會關心表中列的順序,如果它希望在表的末尾放置大量通常爲NULL的列以利用Oracle可以提供的一點壓縮案件。但是在數據模型中使用數據模型非常罕見,因爲表中有幾十個主要爲NULL列的數據模型,或者您關心的是節省的幾個字節的存儲空間。 –