2017-03-14 128 views
0

我創建了一個表作爲select。 列A列B列C列 然後我放棄它,即使使用清除命令。 我添加了列B2 列A列B列B2列C列 ,並將Create table作爲Select命令運行。 當我查詢從新表中選擇*我得到oracle刪除表仍然存在

列A列B列C列B2 爲什麼?爲什麼在我創建它的地方沒有B2列,B & C.這是一個頭痛的問題,因爲我真的有一個75列的表格,我想查看前面的數據。謝謝。

create table NewTable1 nologging parallel 8 compress as 
SELECT ColA, ColB, ColC from table; 

DROP TABLE NewTable1 PURGE; 

create table NewTable1 nologging parallel 8 compress as 
SELECT ColA, ColB, ColB2, ColC from table; 
+2

發佈您的創建/刪除語句和表定義如何創建新表 – XING

+0

即使在沒有清除表的情況下刪除表,我也無法複製此行爲。 – BriteSponge

+0

我相信@BriteSponge,它很奇怪。我從來沒有見過這個。我覺得我瘋了。 –

回答

0

我不得不添加另一列對我的項目,所以我放棄了/又通便,但這個時候,我注意到我在SQL Developer和CTAS是在一個選項卡drop語句位於另一個選項卡中。他們都在表格前面使用模式名稱,但是這次當我在SQL Developer的同一個選項卡上執行了CTAS & CTAS,然後我從另一個選項卡查詢時,所有列的順序都是正確的。所以??也許它是一個SQL開發人員或會話問題?

0

表DDL和您的CTAS查詢將使我們更容易幫助您。

但是你可以看看你的表的all_tab_columns。該視圖中有COLUMN_ID列,它是確定在查詢表時不顯示列順序時列顯示方式的列。它是創建表時指定的列的順序。

所以,除非您指定列順序,否則新表將按原始表中的順序存在列。

舉例來說:

CREATE TABLE qazz 
    (
    a  NUMBER 
    ,b  NUMBER 
    ,c  NUMBER 
    ,b2  DATE 
    ); 

CREATE TABLE qazz_2 AS SELECT * FROM qazz; 

CREATE TABLE qazz_3 AS SELECT a, b, b2, c FROM qazz; 

SELECT table_name, column_name, column_id 
    FROM all_tab_columns 
    WHERE table_name LIKE 'QAZZ%' 
    ORDER BY table_name, column_id; 
+0

你說:「所以,除非你指定列順序,否則你的新表將按原始表中的順序存在列。」但是,如果我刪除我創建的原始表並清除,然後創建表作爲再次選擇相同的名稱,是不是它創建與我指定的順序,而不是在最後添加新的列? –

+0

create table NewTable1 nologging parallel 8 compress as SELECT ColA,ColB,ColC from table; 然後我刪掉表格: DROP TABLE NewTable1 PURGE; 創建表NewTable1 nologging並行8壓縮爲 從表中選擇ColA,ColB,ColB2,ColC; –

+0

OP沒有將列添加到現有表中。他**丟掉桌子然後重新創建桌子。 '?_TAB_COLUMNS'應該沒有「內存」 - 當表重新創建時(使用舊名稱)並且某些列與以前具有相同的名稱時,''?_TAB_COLUMNS'甚至不應該「記住」在刪除之前存在同名的表。 – mathguy

相關問題