2013-10-14 25 views
0

一個問題數據庫:Oracle添加新列但不是最後一列(序列)?

數據庫:Oracle

這是語句(說明:chnage VARCHAR類型爲CLOB)

ALTER TABLE XX 
ADD (TEMP_Value CLOB); 
UPDATE XX SET TEMP_Value=Value; 
COMMIT; 
ALTER TABLE XX DROP COLUMN Value; 
ALTER TABLE XX 
RENAME COLUMN TEMP_Value TO Value; 

問題: 新CLOB列是最後一列XX表(通常)。 如果第二個值現在是最後一列,如何更改序列

+3

表中列的順序完全不相關(「LONG」列除外)。如果你需要它們的順序,只需按順序將它們放到你的'SELECT'語句中 –

+0

@a_horse_with_no_name +1 - 對於數據庫表中列的順序沒有任何意義,就像你有沒有真正的需要嘗試將它們排列整齊。 –

回答

0

我知道下面的解決方案,這對於多列不太明智,所以我想找到其他解決方案。

create newtable as 
select Value, X, XX,.. 

drop table XX; 
rename newtable to XX; 
0

討論here

Oracle不支持在表的中間添加列,只是將其添加到年底,不像MYSQLALTER TABLE TABLENAME ADD COL1 AFTER COL2命令。您的數據庫設計和應用程序功能不應該依賴於數據庫模式中列的順序。畢竟,您總是可以在您的選擇聲明中指定一個訂單,這將是最佳實踐。

SELECT * FROM TABLE不是一個好習慣。

但是,如果出於某種原因,您只需在表格中間有一個新的列,就可以解決問題。

CREATE TABLE TAB1NEW 
AS 
    SELECT 
      0 AS COL1, 
      COL1 AS COL2 
    FROM 
      TAB1; 

DROP TABLE TAB1 PURGE; 

RENAME TAB1NEW TO TAB1; 

其中SELECT 0 AS col1是您的新列,然後根據需要從您的原始表中指定其他列。將SELECT 0 AS col1放在所需順序的適當位置。

之後,您可能需要在該列上運行alter table語句以確保它是您所需的數據類型。請記住放回您的約束,索引,分區......以及根據原始表的內容