Oracle 数据库表 varchar2 类型改成 CLOB

在之前的表设计中,是使用的 varchar2,由于字段内容太长了,导致生产报错了,varchar2 仅支持 4000 ,我们需要改成更大的 CLOB

注意事项


1. 在Oracle JDBC中采用流机制对 BLOB/CLOB 进行读写操作,所以要注意不能在批处理中读写 BLOB/CLOB字段,否则将出现
Stream type cannot be used in batching 异常。

2. Oracle BLOB/CLOB 字段本身拥有一个游标(cursor),JDBC通过游标对Blob/Clob字段进行操作,在Blob/Clob字段创建之前,无法获取其游标句柄,会出现
Connection reset by peer: socket write error 异常。


-- 将 test_table 表 remark 改成 clob 类型(错误示范)
ALTER TABLE test_table MODIFY remark clob;

方法一

-- 首先改成Long类型
ALTER TABLE test_table MODIFY remark long;
-- 在 Long 类型的基础上改成 clob 类型
ALTER TABLE test_table MODIFY remark clob;

报错:ORA-04139: 要更改数据类型,则要修改的列必须为空。

方法二

通过增加字段来进行操作
-- 1.remark 重命名为 remark_bak
ALTER TABLE test_table RENAME COLUMN remark TO remark_bak;
-- 2.添加 remark 字段,类型为 clob
ALTER TABLE test_table ADD remark clob;
-- 3.把 remark_bak 数据更新至 remark
UPDATE test_table SET remark = remark_bak;
-- 4.提交
COMMIT;
-- 5.删除 remark_bak 字段
ALTER TABLE test_table DROP COLUMN remark_bak;

大功告成

数据库开发网站记录

WordPress批量修改MySQL数据库表名前缀

2020-6-13 19:17:27

数据库开发

Linux 自动备份 Oracle 数据库 Shell 脚本

2020-6-24 10:07:51

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索