背景
前面为解决oracle中varchar类型过长导致插入异常提示ORA-01461问题,采用了规避的方法,详见:ORA-01461:仅可以为插入 LONG 列的 LONG 值赋值。
是在IP地址组表中,IP字段配置为varchar2(4000)类型,目前仅4000个字符,最后在使用过程中超过了大小限制。于是需要将其修改为clob类型(大小上限为4G)。
直接用alter修改
1 | alter table FW_SRC_POOLS modify ip clob; |
报错ORA-22858:数据类型的变更无效错误。
解决方法
由于表中已经存在数据了,所以不能直接修改,需要采用新增临时列的方式进行:
先将ip列名修改为ip_tmp
1
alter table FW_SRC_POOLS rename column ip to IP_TMP;
新增ip列,类型为clob
1
alter table FW_SRC_POOLS add ip clob;
将ip_tmp列的内容复制到ip列
1
update fw_src_pools set ip=trim(ip_tmp);
删除ip_tmp列
1
alter table fw_src_pools drop column ip_tmp;
以上就完成了对已有表格中存在数据的varchar类型更换为clob类型的操作,当然也可以建一个临时表的方法,不过还是这样比较方便。
需要注意的是,数据库中字段类型变了,对应的java或者python的后台也需要修改。
比如python中使用cx_oracle库,在读取clob类型时,需要使用read()
方法才行。
1 | x = clob_param.read() |