1. 程式人生 > >oracle12c修改欄位長度報錯:ORA-54033要修改的列由某個虛擬表示式使用

oracle12c修改欄位長度報錯:ORA-54033要修改的列由某個虛擬表示式使用

在Oracle 11g R1中,Oracle以不可見索引和虛擬欄位的形式引入了一些不錯的增強特性。繼承前者併發揚光大,Oracle 12c 中引入了不可見欄位思想。在之前的版本中,為了隱藏重要的資料欄位以避免在通用查詢中顯示,我們往往會建立一個檢視來隱藏所需資訊或應用某些安全條件。

在12c中,你可以在表中建立不可見欄位。當一個欄位定義為不可見時,這一欄位就預設不會出現在通用查詢中,除非在SQL語句或條件中有顯式的提及這一欄位,或是在表定義中有DESCRIBED。要新增或是修改一個不可見欄位是非常容易的,反之亦然。

oracle12c中為提高查詢效能,會在收集統計資訊的時候,自動建立不可見欄位,即虛擬列。

通過下面語句查詢表上的虛擬欄位資訊:

select t.column_name,t.data_default,t.hidden_column from user_tab_cols t where t.table_name='TEST';

通過下面語句刪除虛擬欄位:

exec dbms_stats.drop_extended_stats('USER_NAME','TABLE_NAME','(column1,column2)');

刪除掉虛擬欄位後再次執行alter table modify操作,正常執行。

然後手工再次建立虛擬欄位:

select dbms_stats.create_extended_stats('USER_NAME','TABLE_NAME','(column1,column2)');