ORACLE变更CLOB字段类型,调整字段顺序

本文介绍如何在Oracle数据库中,由于CLOB到VARCHAR2类型的转换限制,通过添加临时字段、更新数据和创建临时表的方法,实现CLOB字段类型变更,同时保持原有字段顺序。
摘要由CSDN通过智能技术生成

ORACLE数据库不能直接变更CLOB字段类型为varchar,把字段清空也不行。

如下表:

SQL> desc  TABLE
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                        NOT NULL NUMBER(20)
 TRANS_IDO                                          VARCHAR2(40)
 ORDER_ID                                           VARCHAR2(20)
 SRC_XML                                            CLOB
 TARGET_XML                                         CLOB
 STATE                                              VARCHAR2(10)
 REMARK                                             VARCHAR2(1000)
 RTN_CODE                                  NOT NULL VARCHAR2(10)
 RTN_MSG                                            VARCHAR2(2000)
 PROCESS_TIME                                       DATE
 COST_CRM                                           NUMBER(11)
 COST_TRANS                                         NUMBER(11)
 COST_IOM                                           NUMBER(11)
 ACCEPT_MONTH                              NOT NULL NUMBER(2)
 MESSAGE_BODY                                       VARCHAR2(1000)

变更SRC_XML字段类型为varchar
SQL> alter table TABLE modify SRC_XML varchar2(4000);
alter table TABLE modify SRC_XML varchar2(4000)
                                         *
ERROR at line 1:
ORA-22859: invalid modification of columns

要达到目的,可以添加一个临时字段

alter table TABLE add SRC varchar2(4000);

把SRC_XML 字段的值插入临时字段

update TABLE set SRC=SRC_XML;

新建临时表,用临时字段替换原CLOB字段的位置

create table TABLE_TMP as select ID,TRANS_IDO,ORDER_ID,SRC,TARGET_XML,STATE,REMARK,RTN_CODE,RTN_MSG,PROCESS_TIME,COST_CRM,COST_TRANS,COST_IOM,ACCEPT_MONTH,MESSAGE_BODY from TABLE;

更改临时字段名为原CLOB字段名

alter table TABLE_TMP rename column SRC to SRC_XML;

改名备份原表,把临时表名改为原表名。注意临时表是没有索引的,改名前最好按照原表建索引

alter table TABLE rename to TABLE_DEL;
alter table TABLE_TMP rename  to TABLE;

这样,就把字段SRC_XML从CLOB字段变更为varchar字段,且保持字段顺序不变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值