技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> Oracle --> ORACLE怎样将CHAR类型字段转换成CLOB

ORACLE怎样将CHAR类型字段转换成CLOB

浏览:1947次  出处信息

本文通过两方面演示怎么将ORACLE数据库中的CHAR类型的字段转换成CLOB类型的字段,一种情况是空列,另一种情况是列中已有数据。测试表结构如下:

1SQL> desc sdb_b2c_goods
2 Name                                      Null?    Type
3 ----------------------------------------- -------- ----------------------------
4 GOODS_ID                                  NOT NULL NUMBER(38)
5 INTRO                                              VARCHAR2(4000 CHAR)
6 ASK                                                VARCHAR2(4000 CHAR)
7 INTRO_DES                                          VARCHAR2(4000 CHAR)
8 INTRO_DES_TXT                                      VARCHAR2(4000 CHAR)
9 INTRO_BRAND                                        VARCHAR2(4000 CHAR)

列中无数据:

列中无数据的情况下,修改字段类型相对简单,直接使用modify语句即可修改,但并不能直接将CHAR类型修改成CLOB类型,否则会遇到ORA-22858错误。

1SQL> alter table sdb_b2c_goods modify(intro clob);
2alter table sdb_b2c_goods modify(intro clob)
3                                 *
4ERROR at line 1:
5ORA-22858: invalid alteration of datatype

空列的情况下,需要先将CHAR类型修改成LONG类型,然后在将LONG类型修改成CLOB。

1SQL> alter table sdb_b2c_goods modify(intro long);
2
3Table altered.
4
5SQL> alter table sdb_b2c_goods modify(intro clob);
6
7Table altered.

列中有数据:

列中已经有数据的情况下,修改字段类型比较麻烦,直接修改会遇到ORA-01439错误。

1SQL> alter table sdb_b2c_goods modify (ask long);
2alter table sdb_b2c_goods modify (ask long)
3                                  *
4ERROR at line 1:
5ORA-01439: column to be modified must be empty to change datatype

如果要修改的列已经存在数据,在11g之前大多都是使用以下方法实现。

1.新增CLOB列

1SQL> alter table sdb_b2c_goods add ask1 clob;
2
3Table altered.

2.将要修改列的数据修改到新增的CLOB列

01SQL> update sdb_b2c_goods set ask1=ask;
02
031 row updated.
04
05SQL> commit;
06
07Commit complete.
08
09SQL> select ask,ask1 from sdb_b2c_goods;
10
11ASK                ASK1
12--------------        --------------
13aaaaaaa            aaaaaaa

3.删除要修改的列

1SQL>  alter table sdb_b2c_goods drop column ask;
2
3Table altered.

4.将新增的列重命名为原要修改列的名称

1SQL> alter table sdb_b2c_goods rename column ask1 to ask;
2
3Table altered.

也可以使用TO_CLOB来将CHAR类型的字段修改为CLOB。

01SQL> select INTRO_DES from sdb_b2c_goods;
02
03INTRO_DES
04------------
05bbbbbb
06
07SQL> alter table sdb_b2c_goods add INTRO_DES2 clob;
08
09Table altered.
10
11SQL> update sdb_b2c_goods set INTRO_DES2=to_clob(INTRO_DES);
12
131 row updated.
14
15SQL> commit;
16
17Commit complete.
18
19SQL> select INTRO_DES,INTRO_DES2 from sdb_b2c_goods;
20
21INTRO_DES            INTRO_DES2
22----------            ----------
23bbbbbb                bbbbbb
24
25SQL> alter table sdb_b2c_goods drop column INTRO_DES;
26
27Table altered.
28
29SQL> alter table sdb_b2c_goods rename column INTRO_DES2 to INTRO_DES;
30
31Table altered.

虽然看起来,加不加TO_CLOB函数基本没什么区别,可是TO_CLOB函数会根据数据库字符集进行转换,在客户端和数据库字符集不一致的情况下,不加TO_CLOB函数可能新增列的数据会乱码,加了TO_CLOB函数,会将数据转换成和数据库字符集一致,就不会出现乱码的情况。


QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1