使用SQL Loader将CSV文件(从Excel生成)上传到Oracle数据库时,出现此错误:
记录1:已拒绝 - 表格TBL01,列GENDER上出错。
ORA-12899:值太大而不能列#34; TST"。" TBL01"。" GENDER" (实际:2,最大值:1)
请指导我完成编码控制文件的正确方法。
CSV文件内容
控制文件内容
LOAD DATA
CHARACTERSET AL32UTF8
INFILE TBL01.csv
INTO TABLE TBL01
FIELDS TERMINATED BY ','
(ID, INITIALS, GENDER)
TBL01结构
Name Null Type
------ ---- ------------
ID NUMBER
INITIALS VARCHAR2(30)
GENDER CHAR(1)
答案 0 :(得分:0)
我认为GENDER
是VARCHAR2(N)
,其中N
是最大长度(以字节为单位)(默认情况下)。在这种情况下,您可以更改列类型:
GENDER VARCHAR2(N CHAR)
给出字符的最大长度而不是字节。
或者您只是有一个小N
(表格列大小允许的最大值为4000)
答案 1 :(得分:0)
尝试使用TRIM删除无关的空格(如果存在),但我怀疑字符集可能是个问题?我没有这方面的经验,但是如果你使用的是一个2字节的字符集并试图将它放在表中的一个字节中,那么这可能是个问题吗?无论如何要验证的东西。确保数据库使用您在控制文件中指定的相同字符集。
LOAD DATA
CHARACTERSET AL32UTF8
INFILE TBL01.csv
INTO TABLE TBL01
FIELDS TERMINATED BY ','
(ID,
INITIALS,
GENDER "TRIM(:GENDER)"
)
答案 2 :(得分:0)
与@Multisync讨论:
他/她建议(这是可行的,但我的案例涉及许多修改):
最简单的解决方案是在每行的最后一列之后加上逗号
通常csv行看起来像:1,3,4,5,6;
在这种情况下,你可以使用FIELDS TERMINATED BY';'在您的控制文件中
最后我在我的控制文件中添加了另一行,问题解决了,因为在每个csv行的末尾都有回车符。
LOAD DATA
CHARACTERSET AL32UTF8
INFILE TBL01.csv
INTO TABLE TBL01
FIELDS TERMINATED BY ','
(ID,
INITIALS,
GENDER TERMINATED BY '\r')