在之前的表设计中,是使用的 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;
大功告成