ITPub博客

首页 > 数据库 > Oracle > varchar2 to clob 探究

varchar2 to clob 探究

原创 Oracle 作者:lovehewenyu 时间:2012-04-19 13:45:34 0 删除 编辑

 

 

 

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

数据正确没有丢失。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26442936/viewspace-721679/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle,Mysql,EMC 存储,NBU备份

注册时间:2012-02-03

  • 博文量
    267
  • 访问量
    1271531