2014-06-20 147 views
3

我們有一個用(空)虛擬列定義的Oracle表。出於多種原因,我們決定應該事先生成該列,並按正常方式填充。是否有可能修改列,使其不再虛擬,而不刪除並添加回來?是否可以在Oracle中使虛擬列不再虛擬化?

下不起作用:

alter table mytable modify virtualcolumn varchar2(255) 

它成功返回,但生成功能保持不變。我沒有看到任何有關刪除Oracle 11g語法圖中的「虛擬」屬性的信息,這導致我認爲目前不可能。

+1

不,虛擬列本身不能「物化」。如果要使其成爲永久性,請在表中添加新列,然後使用虛擬列中的值更新它,然後刪除該虛擬列。 –

+0

看起來你是對的。如果你輸入你的評論作爲答案,我會選擇它。 –

回答

2

不,虛擬列本身不能「物化」。如果需要永久創建虛擬列,請向表中添加一個新列,然後使用虛擬列中的值更新它,然後刪除該虛擬列。

您在問題中提供的DML語句alter table不會將虛擬列轉換爲永久的列。它僅僅因爲虛擬列的新舊數據類型相同而成功返回(您不能在不更改基礎表達式的數據類型的情況下更改虛擬列的數據類型)。不過,它們的大小可能不同。