我有一個特定的場景,我必須在Oracle中的現有表中插入兩個新列。我無法做到丟棄和重新創建表格。那麼可以通過什麼方式來實現?如何在oracle中的特定位置插入列而不刪除並重新創建表?
18
A
回答
15
Amit-
我不相信你可以在任何地方,但在表的末尾添加一列一旦創建了表。一種解決方案可能是試試這個:
CREATE TABLE MY_TEMP_TABLE AS
SELECT *
FROM TABLE_TO_CHANGE;
下降要列添加到表:
DROP TABLE TABLE_TO_CHANGE;
這是你可以從頭重建現有的表添加列中的地步,你希望。 讓我們假設這個練習,你想添加名爲「COL2和COL3」的列。
現在,請將數據備份到新表:
INSERT INTO TABLE_TO_CHANGE (COL1, COL2, COL3, COL4)
SELECT COL1, 'Foo', 'Bar', COL4
FROM MY_TEMP_TABLE;
當數據被插入到你的「新還舊」表,您可以刪除臨時表。
DROP TABLE MY_TEMP_TABLE;
這往往是我做什麼,當我想在一個特定的位置添加列。顯然,如果這是一個生產線上系統,那麼這可能不實際,但只是一個潛在的想法。
-CJ
5
你(還)不能選擇使用ALTER TABLE列的位置:它只能被添加到表的末尾。你顯然可以按照你想要的順序選擇列,所以除非你使用SELECT * FROM列順序不應該是一個大問題。
如果你真的必須讓他們在一個特定的順序,你不能刪除並重新創建表,那麼你也許能夠代替刪除並重新列: -
首頁複印表
CREATE TABLE my_tab_temp AS SELECT * FROM my_tab;
然後丟棄你想成爲後列列要插入
ALTER TABLE my_tab DROP COLUMN three;
現在添加新列(在此是兩個例子),並且卸下了的。
ALTER TABLE my_tab ADD (two NUMBER(2), three NUMBER(10));
最後加回的數據重新創建的列
UPDATE my_tab SET my_tab.three = (SELECT my_tab_temp.three FROM my_tab_temp WHERE my_tab.one = my_tab_temp.one);
顯然您的更新很可能會更加複雜,你必須處理的索引和約束,並不能在某些情況下使用它(LOB列等)。此外,這是一個非常糟糕的方式來做到這一點 - 但表格將始終存在,您將按照您想要的順序結束列。但是列順序真的很重要嗎?
4
雖然這有點舊,但我想添加一個稍微改進的版本,它確實會改變列順序。以下是具體步驟(假設我們有一個列COL1,COL2,COL3表TAB1):
- 添加新列的表TAB1:
alter table TAB1 add (NEW_COL number);
- 「複製」 表溫度名字同時改變列順序和重命名新列:
create table tempTAB1 as select NEW_COL as COL0, COL1, COL2, COL3 from TAB1;
- 刪除現有表:
drop table TAB1;
- 重命名臨時表名,只是下降的表名:
rename tempTAB1 to TAB1;
-10
就這樣做:
alter table TABLE_NAME (COLUMN_NAME DATA_TYPE);
一個新列會被添加到表格的末尾。
相關問題
- 1. 在Oracle中更改FK刪除規則而不刪除並重新創建它?
- 2. 增加SQL Server中標識列的值而不刪除並重新創建表
- 3. 刪除並重新插入ListView列(.NET)
- 4. 在特定位置插入列表
- 5. 插入在陣列上的特定位置,而不會在JS
- 6. 插入Oracle數據庫表中的特定位置?
- 7. 列表中創建data.frames新柱,並用特定的重複值
- 8. 刪除所有舊錶並在dbflow中重新創建表
- 9. Oracle:自動刪除並重新創建連接的用戶
- 10. 刪除並重新插入GeoFire位置以觸發onKeyExited和onKeyEntered不起作用
- 11. 如何在刪除表中的數據後更新特定列
- 12. 插入值的數組列表,並刪除任何重複
- 13. 在Python中創建列表並刪除重複項
- 14. 將值插入Python中列表中的特定位置
- 15. 如何刪除插入表中標識列的重複值?
- 16. 在列表末尾插入一個整數並在第n個位置刪除
- 17. 創建新的和刪除並插入圖案
- 18. 如何從C#中特定位置的列表框中刪除項目
- 19. 創建使用現有表的新表並刪除重複
- 20. 如何刪除表格並使用Elasticbeanstalk在亞馬遜RDS中重新創建?
- 21. 將單詞插入列表中的特定位置
- 22. 如何刪除不需要的行並在SQL中創建新列?
- 23. 如何在特定位置創建斷點而不存在任何代碼
- 24. 如何刪除列表中的特定重複號碼?
- 25. 重新創建Oracle DUAL表
- 26. SQL刪除表並重新創建並保留數據
- 27. 值刪除後不會重新插入
- 28. 刪除並重新創建單個表格(在Heroku上)
- 29. 更新表或刪除並重新創建?
- 30. Rails的導入CSV記錄全部刪除,並重新創建
12c有一個技巧可以做到這一點:http://tkyte.blogspot.com.au/2013/07/12c-silly-little-trick-with-invisibility.html(注意,然而,沒有邏輯原因來更改列順序。) – 2013-07-03 00:54:36
難道你不想在表的最後添加最可能爲空的列來節省空間嗎?請參閱https://community.oracle.com/thread/855964 – 2016-12-29 12:26:37