varchar2 to clob 探究

 

 

Varchar2  to long

 

类型

转换过程

列是否有数据

正确做法

varchar2

Varchar2—long

建立一个新的列,然后

long

Long---clob

是或否

原列的数据copy

clob

 

 

过来。

 

总结:var char2 转换成clob 。varchar2 转换成 long 然后转换成 clob。

          varcha2转换成long,转换列必须保证没有数据。

         long转换成clob ,对列没有数据限制。

注意:你的类型转换成功后,别忘了重建索引。以免索引失效。

 

转换的正确方法是:
// *Action:  Create a new column of the desired type and copy the current
//           column data to the new type using the appropriate type

//           constructor.

实验:

 

建立一张实验表,有varchar2类型的。

SQL> create table test (a varchar2(4000),b number);

 

Table created.

 

SQL> select * from test;

 

no rows selected

 

SQL> desc test;

 Name                                      Null?    Type

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

 A                                                  VARCHAR2(4000)

 B                                                  NUMBER

 

插入数据

SQL> insert into test (A,B) values ('test',1);

 

1 row created.

SQL> select * from test;

 

A

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

         B

----------

test

         1

 

SQL> commit;

 

Commit complete.

 

SQL>  alter table test modify(a colb);

 alter table test modify(a colb)

                         *

ERROR at line 1:

ORA-22858: invalid alteration of datatype

// *Cause:   An attempt was made to modify the column type to object, REF,
//           nested table, VARRAY or LOB type.
// *Action:  Create a new column of the desired type and copy the current
//           column data to the new type using the appropriate type
//           constructor.

有人认为这个转换报错是因为列有数据造成的,其实不然。这个报错是因为lob类型的特殊性。即使你没有数据也不行,下面是证明列没有数据也不能转换的实验。

 

SQL> truncate table test;

 

Table truncated.

 

SQL> select  * from test;

 

no rows selected

 

SQL> alter table test modify(a clob);

alter table test modify(a clob)

                        *

ERROR at line 1:

ORA-22858: invalid alteration of datatype

 

以上步骤证明了,无聊你的varchar2 是否有数据 都不能直接转换成clob

但是可以转换成LONG 然后在转换成CLOB

 

Varchar2 to long

SQL> insert into test values ('test',1);

 

1 row created.

 

SQL> commit;

 

Commit complete.

 

SQL> select * from test;

 

A

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

         B

----------

test

         1

 

 

SQL> alter table test modify(a long);

alter table test modify(a long)

                        *

ERROR at line 1:

ORA-01439: column to be modified must be empty to change datatype

 

当varchar to log 时 ,需要列中没有数据。由varchar2 转换成 long 类型成功。

 

SQL> truncate table test;

 

Table truncated.

 

SQL> alter table test modify(a long);

 

Table altered.

 

列有数据的情况下 long to clob也可以成功,下面实验证明,然后验证数据是否正确。

SQL> insert into test (a,b) values ('test',1);

 

1 row created.

 

SQL> commit;

 

Commit complete.

 

SQL> alter table test modify(a clob); 

 

Table altered.

 

SQL> select * from test;

 

A

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

         B

----------

test

         1

数据正确没有丢失。

你可能感兴趣的:(varchar2 to clob 探究)