假設我已經有3列A,B,C在我的表格Tb中。我想在B和C之間添加一個新的列M.我該怎麼做?Oracle 11g express - 選擇列插入的位置?
添加M後,我的表應該看起來像 - A B M C和NOT A B C M?
假設我已經有3列A,B,C在我的表格Tb中。我想在B和C之間添加一個新的列M.我該怎麼做?Oracle 11g express - 選擇列插入的位置?
添加M後,我的表應該看起來像 - A B M C和NOT A B C M?
簡單的答案是,你不能。列總是添加在最後。但是,您不應該關心表中列的順序,因爲您應始終明確列出查詢中的列和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正在做與上面所做的基本相同的事情,但增加了一些物化視圖日誌以允許應用程序在操作期間繼續訪問表。
但是,如果你發現自己關心表格中的列順序,那麼最好停下來弄清楚你做錯了什麼,而不是繼續在任何一個路徑上前進。應該是格外罕見的,你會關心表中列的物理順序。
賈斯汀 - 你能給我舉一個罕見的例子,當列的物理順序變得重要嗎? –
@breadbutter - 大多數時候,人們關心的是列的順序,因爲應用程序構建不好。一個精心打造的應用程序可能會關心表中列的順序,如果它希望在表的末尾放置大量通常爲NULL的列以利用Oracle可以提供的一點壓縮案件。但是在數據模型中使用數據模型非常罕見,因爲表中有幾十個主要爲NULL列的數據模型,或者您關心的是節省的幾個字節的存儲空間。 –