oracle varchar2字段类型转换为clob类型

--目标:

将表test中,name字段的数据类型由varchar2转为clob类型

--test表环境:

SQL> desc test
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER
 NAME                                          VARCHAR2(4000)
 REMARK                                     VARCHAR2(46)
 
SQL> select count(id) from test;
 COUNT(ID)
----------
    300000

--备份数据,数据泵导出dmp文件或在库中创建备份表

SQL> create table test_20200805 as select * from test3;
Table created.

--开始转换

方法一:替换字段

1)将要替换的字段name改为name_bak

SQL> alter table test rename column name to name_bak;
Table altered.

SQL> desc TEST
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER
 NAME_BAK                                 VARCHAR2(4000)
 REMARK                                     VARCHAR2(46)

2)增加clob字段name

SQL> alter table test add name clob;
Table altered.

SQL> desc TEST
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER
 NAME_BAK                                 VARCHAR2(4000)
 REMARK                                     VARCHAR2(46)
 NAME                                           CLOB

3) 更新数据至clob字段

SQL> update test set name=name_bak;
300000 rows updated.
Elapsed: 00:01:45.60

SQL> commit;
Commit complete.
Elapsed: 00:00:00.01

4) 删除原字段name_bak

SQL> alter table test drop column name_bak;
Table altered.
Elapsed: 00:00:42.58

5)  表结构,表数据验证

SQL> desc test
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER
 REMARK                                     VARCHAR2(46)
 NAME                                           CLOB

SQL> select * from test;
        ID REMARK                                         NAME
---------- ---------------------------------------------- --------------------------------------------------------------------------------
     38706 38706remark                                    38706name
     38707 38707remark                                    38707name
     38708 38708remark                                    38708name
     38709 38709remark                                    38709name
     38710 38710remark                                    38710name
     38711 38711remark                                    38711name
     38712 38712remark                                    38712name
     38713 38713remark                                    38713name
     38714 38714remark                                    38714name
     38715 38715remark                                    38715name
     38716 38716remark                                    38716name
     38717 38717remark                                    38717name
     38718 38718remark                                    38718name
     38719 38719remark                                    38719name
     38721 38721remark                                    38721name
     38725 38725remark                                    38725name
     38728 38728remark                                    38728name
     38732 38732remark                                    38732name
     38735 38735remark                                    38735name
     38739 38739remark                                    38739name
.....................
.....................

方法二:替换表

1)  表test重命名为test_bak

SQL> rename test to test_bak;
Table renamed.
Elapsed: 00:00:00.21

2)  通过如下语句创建新表

SQL> create table test as select id,to_clob(name) name,remark from test_bak;
Table created.
Elapsed: 00:00:01.45

3)表结构,表数据验证

SQL> desc test
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER
 NAME                                          CLOB
 REMARK                                     VARCHAR2(46)

SQL> select * from test where rownum<=100;
        ID NAME                                                                             REMARK
---------- -------------------------------------------------------------------------------- ----------------------------------------------
    196304 196304name                                                                       196304remark
    196305 196305name                                                                       196305remark
    196306 196306name                                                                       196306remark
    196307 196307name                                                                       196307remark
    196308 196308name                                                                       196308remark
    196309 196309name                                                                       196309remark
    196310 196310name                                                                       196310remark
    196311 196311name                                                                       196311remark
    196312 196312name                                                                       196312remark
    196313 196313name                                                                       196313remark
    196314 196314name                                                                       196314remark
    196315 196315name                                                                       196315remark
    196316 196316name                                                                       196316remark
    196317 196317name                                                                       196317remark
    196318 196318name                                                                       196318remark
    196319 196319name                                                                       196319remark
................
................
................

猜你喜欢

转载自blog.csdn.net/songyundong1993/article/details/107819496
今日推荐