有一批excel格式的数据要导入到oracle中,在excel中用len校验字符串长度的时候发现
并没有超过oracle中varchar2的长度限制,但在实际导入过程中却遇到了错误ORA-12899
ORA-12899: 列 "SCOTT"."CARMODEL"."MODEL" 的值太大 (实际值: 32, 最大值: 30)
查询excel的帮助后得知:
LEN 返回文本字符串中的字符数,汉字和字母、数字都按单字节计算。
LENB 返回文本字符串中用于代表字符的字节数。此函数用于双字节字符。
汉字按双字节计算,字母、数字按单字节计算。
在excel中:=len("A2测试") 返回值是4
=lenb("A2测试") 返回值是6
oracle中:length(string)计算string所占的字符长度 :返回字符串的长度,单位是字符
lengthb(string)计算string所占的字节长度 :返回字符串的长度,单位是字节
SQL> SELECT LENGTH('A2测试') LENGTH, LENGTHB('A2测试') LENGTHB FROM DUAL;
LENGTH LENGTHB
---------- ----------
4 6
oracle中varchar2()中的长度应该是指字节数。
所以在校验的时候应该以excel中的lenb()计算出的长度与oracle中varcha2中设定的长度进行比较。