Oracle :value too large for column "SCHEMA"."TABLE"."COLUMN" (actual: 519, maximum: 500)的解决方案

原因:我是使用 CREATE TABLE XXX AS subquery 进行创建的数据表,主要是将相关的数据聚合在一起,然后通过导出为SQL脚本文件,进行导入到新库中,导致部分INSERT INTO语句,因数据库字符集的不一致生成的CREATE TABLE表结构的字段类型长度不一致,从而会插入失败value too large for column "SCHEMA"."TABLE"."COLUMN" (actual: 519, maximum: 500) ;因为长度不兼容

解决方法就是在对应SELECT的出错字段上,使用CONVERT转换字符集或者使用CAST将类型的长度设置大点,然后CREATE TABLE会根据你设置的字段类型为表结构的类型;但是使用CONVERT转换字符集后,进行查询会导致 ORA-29275: partial multibyte character 错误。

所以我这边解决的方式是使用CAST转换类型吧

CREATE TABLE XXX AS

SELECT CAST(col AS VARCHAR(1000)),... FROM xxx;

 

CAST函数文档:https://docs.oracle.com/database/121/SQLRF/functions024.htm#SQLRF00613

 

使用CONVERT函数示例:

CREATE TABLE XXX AS

SELECT CONVERT(col,'AL32UTF8'),... FROM xxx;

 

CONVERT函数文档:https://docs.oracle.com/database/121/SQLRF/functions041.htm#SQLRF00620

如果只执行CONVERT的SELECT子句,会出错 ORA-29275: partial multibyte character ,但是 CREATE TABLE XXX AS SELECT 一起执行,不会出错,但是查询生成的表也会报错ORA-29275。

 

posted @ 2021-12-23 12:14  星小梦  阅读(839)  评论(0编辑  收藏  举报