Oracle 列由VARCHAR2改为CLOB类型
最近突然遇到好多Oracle 列由VARCHAR2改为CLOB类型的需求,不知道大家是不是约好了。。。查了一些网上的文章,结合实际修改的情况记录一下各种场景及解决方法。
一、 示例准备
新建两张表TB_WITHOUT_DATA(VARCHAR2列不包含数据)和TB_WITH_DATA(Varchar2列包含数据)
create table TB_WITHOUT_DATA
(id NUMBER,name VARCHAR2(100),description VARCHAR2(2000)
);create table TB_WITH_DATA
(id NUMBER,name VARCHAR2(100),description VARCHAR2(2000)
);insert into TB_WITH_DATA VALUES (1,'David Louis','He is capable of resolving such kind of issue');
insert into TB_WITH_DATA VALUES (2,'German Noemi','She is very beatiful and charming');
insert into TB_WITH_DATA VALUES (3,'Oliver Queen','He is main actor in the Green Arrow');
insert into TB_WITH_DATA VALUES (4,'Mark Williams','He plays snooker very well');
insert into TB_WITH_DATA VALUES (5,'Sita Rama Raju Kata','I do not know this guy');
insert into TB_WITH_DATA VALUES (6,'Promethus','This is a very nice movie');
commit;
错误方法
ALTER TABLE TB_WITHOUT_DATA MODIFY description clob;
错误信息
SQL Error: ORA-22858: invalid alteration of datatype
22858. 00000 - "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 currentcolumn data to the new type using the appropriate typeconstructor.
二、 解决方法
1. 待修改列无数据
- 列上无约束
首先把该列改成Long类型,然后再改成clob类型
alter table TB_WITHOUT_DATA modify description long;--首先改成Long类型
alter table TB_WITHOUT_DATA modify description clob;--在Long类型的基础上改成clob类型
对于此列已经存在数据的,不能通过此方法,否则会报如下错误:
alter table TB_WITH_DATA modify description long;--更改包含数据的列
SQL Error: ORA-01439: column to be modified must be empty to change datatype
01439. 00000 - "column to be modified must be empty to change datatype"
- 列上有约束
如果列上有约束改为long类型也会报错
解决方法:
1)删除约束后再改,改完再建约束。
2)既然都是空的,drop掉这列直接加个clob类型列就好了,记得把约束建回去(建议先建测试表试下导入数据是否有问题)
2. 待修改列包含数据
注意此方法需要停业务,不然新数据会丢。当然不包含数据也可以用这种,但没必要。
1)重命名原列
alter table TB_WITHOUT_DATA rename column description to description_bak;
alter table TB_WITH_DATA rename column description to description_bak;
2)新建clob列
alter table TB_WITHOUT_DATA add description clob;
alter table TB_WITH_DATA add description clob;
3)将原列中数据更新到clob列
update TB_WITH_DATA set description=description_bak;
commit;
4)删除原列
alter table TB_WITHOUT_DATA drop column description_bak;
alter table TB_WITH_DATA drop column description_bak;
5)验证
表结构验证
DESC TB_WITHOUT_DATA
Name Null Type
----------- ---- -------------
ID NUMBER
NAME VARCHAR2(100)
DESCRIPTION CLOB DESC TB_WITH_DATA
Name Null Type
----------- ---- -------------
ID NUMBER
NAME VARCHAR2(100)
DESCRIPTION CLOB
数据验证
select * from TB_WITH_DATA;ID NAME DESCRIPTION
---------- -------------------------- ------------------------------------------------1 David Louis He is capable of resolving such kind of issue 2 German Noemi She is very beatiful and charming 3 Oliver Queen He is main actor in the Green Arrow 4 Mark Williams He plays snooker very well 5 Sita Rama Raju Kata I do not know this guy 6 Promethus This is a very nice movie
3. 待修改列包含数据,另一种方法
注意此方法需要停业务,不然新数据会丢。当然不包含数据也可以用这种,但没必要。
1)重命名业务表
alter table TB_WITH_DATA rename to TB_WITH_DATA_BAK;
2)通过以下语句创建新表
create table TB_WITH_DATA as select id, name, to_clob(description) description from TB_WITH_DATA_BAK;
表结构与数据验证
desc TB_WITH_DATA
Name Null Type
----------- ---- -------------
ID NUMBER
NAME VARCHAR2(100)
DESCRIPTION CLOB select * from TB_WITH_DATA;ID NAME DESCRIPTION
---------- -------------------------- ------------------------------------------------1 David Louis He is capable of resolving such kind of issue 2 German Noemi She is very beatiful and charming 3 Oliver Queen He is main actor in the Green Arrow 4 Mark Williams He plays snooker very well 5 Sita Rama Raju Kata I do not know this guy 6 Promethus This is a very nice movie
3)删除备份表
DROP TABLE TB_WITH_DATA_BAK;
参考
https://blog.csdn.net/jssg_tzw/article/details/40829867
Oracle 列由VARCHAR2改为CLOB类型相关推荐
- oracle将把varchar2字段(长度4000)改为clob类型
把表DT_CORP_ENTERPRISE中ASSetsinvestmen字段(varchar2,长度为4000)改为clob类型 --增加大字段项 alter table DT_CORP_ENTERP ...
- oracle将其他字段类型改为clob类型方法
oracle将其他字段类型改为clob类型方法 FIELD_INSTANCE 表名 FIELD_STRING_VALUE 字段名 第一步:添加一个clob类型的字段 alter table FIELD ...
- oracle修改clob值,oracle修改字段类型由varchar2修改为clob类型
模拟情景,表:batchintfloadlog,要修改字段:resultinfo,字段 从原来的 varchar2 修改为 clob 1.假设要修改字段数值为空,则可以直接修改: 可是发现如下错误: ...
- varchar2改为clob带来的问题
为什么80%的码农都做不了架构师?>>> jdbc的PreparedStatement.setString(),ResultSet.getString()对clob和strin ...
- Oracle中表列由VARCHAR2类型改成CLOB
情景 原来表中的列定义成VARCHAR2类型,众所周知,VARCHAR2类型最大支持长度为4000.如果由于业务需要,想把此列转换为CLOB类型,在Oracle中直接通过ALTER语句转换是行不通的. ...
- oracle 数据类型的变更无效 clob,ORA-22858:数据类型的变更无效varchar2类型转换为clob类型...
oracle中,如果一个列的类型为varchar2,那么它不能直接转换为clob类型.可以通过间接的方式来修改.下面为实验: Oracle中,如果一个列的类型为varchar2,那么它不能直接转换为c ...
- oracle数据的变更无效,ORA-22858:数据类型的变更无效varchar2类型转换为clob类型
oracle中,如果一个列的类型为varchar2,那么它不能直接转换为clob类型.可以通过间接的方式来修改.下面为实验: Oracle中,如果一个列的类型为varchar2,那么它不能直接转换为c ...
- oracle 数据类型的变更无效 clob,ORA-22858数据类型的变更无效 varchar2类型转换为clob类型...
ORA-22858: 数据类型的变更无效 varchar2类型转换为clob类型 Oracle中,如果一个列的类型为varchar2,那么它不能直接转换为clob类型.可以通过间接的方式来修改.下面为 ...
- oracle的clob类型数据,Oracle的CLOB类型数据处理
Oracle菜鸟之grant授权: http://www.2cto.com/database/201408/322396.html oracle 查看用户所在的表空间 : http://www.voi ...
最新文章
- Git 远程操作详解
- 熊市利好,Bit-Z推出币圈最高返佣50%
- linux3.0-内核自带led驱动移植
- 三星显示、LG已开始为苹果iPhone 13生产OLED屏幕
- android wifi是否可用,Android检测网络连接是否可用
- 扩展progress_timer的计时精度
- python模拟按键_Python实现windows下模拟按键和鼠标点击的方法
- matlab anova 如何不画图,方差分析的数据处理和作图
- mybatis字符串模糊匹配
- 0039-如何使用Python Impyla客户端连接Hive和Impala
- [转载]MyISAM InnoDB 区别
- 电视盒子为啥不安装鸿蒙,电视盒子视频播放不了怎么办?只需三步轻松解决!...
- Win10 远程桌面登陆闪退问题处理
- 服务器挂载本地iso文件系统,CentOS系统中挂载光盘镜像ISO文件的教程
- 今天开机发现,在光标左边多了一个长方形的带有箭头的,怎么去掉?
- 目标定位和检测系列中IOU的含义
- 使用 Play Integrity API 来保护您的应用和游戏
- HFSS仿真笔记1《A Low-Profile Ultrawideband Slotted Dipole Antenna Based on Artificial Magnetic Conductor》
- NBTSCAN的使用,查找arp病毒工具。
- SQL 2012 更换数据库路径
热门文章
- 前端js获取系统更新刷新页面
- Arduino IDE安装UNO和NANO开发板驱动教程(CH341SER.EXE)
- 电脑如何设置定时任务,定时执行
- Python | Python 使用xlwt模块操作Excel(持续更新)
- 查看电脑ip,关闭电脑,远程重启关闭等电脑命令大全
- 关于计算机等级考试的资源网,计算机等级考试计算机网络题库
- 在北京安定门零售店拿下绿源卡乐03,让我随时出发“找自由”
- 舆情分析流程及具体做法
- android 设置字体包 字体包导致字体偏移 字体内边距问题(已解决)
- 树莓派魔镜项目——笔记一 项目介绍和内容链接