long型別相關

psufnxk2000發表於2012-01-06

關於long型別的操作,如果一個表中有Long型別,那麼不能直接用ctas 。如:

SQL> desc test1;

 名稱                                      是否為空? 型別

 ----------------------------------------- -------- -----------

 

 ID                                                 NUMBER

 NAME                                               LONG

 

SQL> create table test2 as select * from test1;

create table test2 as select * from test1

                             *

1 行出現錯誤:

ORA-00997: 非法使用 LONG 資料型別

可以採用的方法:

SQL> COPY  FROM song/song@test to song/song@test create  test2 using select * from test1;

 

陣列提取/繫結大小為 15(陣列大小為 15)

將在完成時提交。(提交的副本為 0)

最大 long 大小為 80(long 80)

TEST2 已建立。

 

1 行選自 song@test

   1 行已插入 TEST2

   1 行已提交至 TEST2 (位於 song@test)

或者採用迂迴的方法,即把long轉換為lob:

SQL> create table  test3 as select id,to_lob(name) name  from test1;

 

表已建立。

 

SQL> desc test3

 名稱                                      是否為空? 型別

 ----------------------------------------- -------- ------------------------

 

 ID                                                 NUMBER

 NAME                                               CLOB

如果對test1進行move也會報錯:

SQL> alter table test1 move;

alter table test1 move

*

1 行出現錯誤:

ORA-00997: 非法使用 LONG 資料型別

只有先改為別的型別才能進行move.

 

SQL> alter table test1 modify name varchar2(20);

alter table test1 modify name varchar2(20)

                         *

1 行出現錯誤:

ORA-01439: 要更改資料型別, 則要修改的列必須為空

 

 

SQL> delete from test1;

 

已刪除 1 行。

 

SQL> commit;

 

提交完成。

 

SQL> alter table test1 modify name varchar2(20);

 

表已更改。

 

SQL> alter table test1 move;

 

 

表已更改。

這種在生產環境還沒有遇見過

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25099483/viewspace-714510/,如需轉載,請註明出處,否則將追究法律責任。

相關文章