2013-12-03 80 views
1

我試圖在保留現有數據的同時修改數據類型。這是當前設置:修改列數據類型時保留數據

create or replace type xyz.Varray2 is varray(50) of varchar2(20); 

CREATE TABLE xyz.owner (
MODIFIED DATE, 
ID Varchar(18), 
STATE Varchar(2), 
CONTRIBUTOR_IDS xyz.Varray2 
) 

的示例記錄是這樣的:

10-MAR-13 408923100000000002 CA VARRAY2('Bob', 'Tom', 'Mary', 'Henry', 'Bart') 

我需要修改Varray2數據類型是一個varray(150)。我寧願保留Varray2類型,但如果需要,可以創建新的Varray3類型以供使用。

此表包含數百萬條需要保留的記錄。爲了修改現有的Varray2類型,我必須刪除表格,這是我的第一個問題。我試圖導出表格,然後在將Varray2更改爲150後將其導入,但它給出了類型不同的錯誤。我試圖用新的數據類型創建一個備份表,但是在嘗試保存數據時又出錯(不兼容的類型)。它不會讓我動態修改列數據類型,(ORA-22859)。

我正在編寫一個遊標甚至是一個bash腳本來分析假脫機輸出以生成INSERT命令來插入到新表中,但這似乎過分了。我希望這裏有人能夠想出一個更簡單的解決方案。

回答

3

varray2數據類型的上限可以alter type聲明增加:

create or replace type Varray2 is varray(50) of varchar2(20); 
/
TYPE VARRAY2 compiled 


create table owner (
    modified  date,   
    id1    Varchar2(18), -- use varchar2 data type, not varchar. 
    state   Varchar2(2), 
    contributer_ids Varray2 
) 
/

table OWNER created. 

當前有關varray2數據類型:

SQL> clear screen; 
SQL> column type_name format a11; 
SQL> column upper_bound format a11 

SQL> select t.type_name 
    2  , t.upper_bound 
    3 from all_coll_types t 
    4 where type_name = 'VARRAY2'; 

TYPE_NAME UPPER_BOUND 
----------- ----------- 
VARRAY2    50 

更改varray2數據類型的上限:

SQL> alter type Varray2 modify limit 150 cascade; 

type VARRAY2 altered. 

varray2數據類型的上限後已經改變:所述alter type語句的

SQL> clear screen; 
SQL> column type_name format a11; 
SQL> column upper_bound format a11 

SQL> select t.type_name 
    2  , t.upper_bound 
    3 from all_coll_types t 
    4 where type_name = 'VARRAY2'; 

TYPE_NAME UPPER_BOUND 
----------- ----------- 
VARRAY2    150 

cascade子句傳播數據類型轉換成依賴對象,不管它是一個表或其他數據類型。

+0

alter命令完美運行。謝謝! – japkin

相關問題