Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL*加载程序无法识别分隔符“¥&引用;_Oracle_Utf 8_Delimiter_Sql Loader - Fatal编程技术网

Oracle SQL*加载程序无法识别分隔符“¥&引用;

Oracle SQL*加载程序无法识别分隔符“¥&引用;,oracle,utf-8,delimiter,sql-loader,Oracle,Utf 8,Delimiter,Sql Loader,当尝试加载带有分隔符的UTF-8文件时,它在找到字符时不会分隔字段。我们从超过列大小的值中得到一个ORA-12899错误,因为它试图将整行放入第一列 在UTF-8中,¥是的¥(C2A5),但它似乎正在试图找到C2A5 数据库设置为 NLS_LANGUAGE SPANISH NLS_TERRITORY SPAIN NLS_CURRENCY ? NLS_ISO_CURRENCY SPAIN NLS_NUMERIC_CHARACTERS ,. NLS_CHARACTERSET

当尝试加载带有分隔符的UTF-8文件时,它在找到字符时不会分隔字段。我们从超过列大小的值中得到一个ORA-12899错误,因为它试图将整行放入第一列

在UTF-8中,¥的¥(C2A5),但它似乎正在试图找到C2A5

数据库设置为

NLS_LANGUAGE    SPANISH
NLS_TERRITORY   SPAIN
NLS_CURRENCY    ?
NLS_ISO_CURRENCY    SPAIN
NLS_NUMERIC_CHARACTERS  ,.
NLS_CHARACTERSET    WE8ISO8859P15
NLS_CALENDAR    GREGORIAN
NLS_DATE_FORMAT DD/MM/RR
NLS_DATE_LANGUAGE   SPANISH
NLS_SORT    SPANISH
NLS_TIME_FORMAT HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT    DD/MM/RR HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT  HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT DD/MM/RR HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY   ?
NLS_COMP    BINARY
NLS_LENGTH_SEMANTICS    BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET  AL16UTF16
NLS_RDBMS_VERSION   11.2.0.3.0
我们试过:

NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
NLS_LANG=SPANISH_SPAIN.WE8MSWIN1252
我们正在使用西班牙语语言环境在Windows7计算机上的命令窗口中运行SQL*Loader

控制文件:

LOAD DATA
CHARACTERSET UTF8
INFILE  'C:\tmp\xxxy.txt'
BADFILE 'C:\tmp\xxxy.bad'
TRUNCATE INTO TABLE  SAMPLE.TEST_CAR_VENCIMI_INTERMED
fields terminated by "¥"
TRAILING NULLCOLS
(
CODE             CHAR "upper(ltrim(rtrim(:CODE)))",
CIF              CHAR "upper(ltrim(rtrim(:CIF)))",
CODIGO_PRESTAMO  CHAR "upper(ltrim(rtrim(:CODIGO_PRESTAMO)))"
)
示例数据文件:

21AK0100¥P11111111F¥910002¥000000000106013.64¥666666666¥mail@domain.com¥address¥11111¥Name¥Surname 1¥Surname 2¥mail2@domain.com¥666666666

由于您使用的是UTF8字符和UTF8文件格式(我认为),因此对于运行SQL*Loader的会话,请将NLS_LANG环境变量设置为“SPANISH_SPANISH.UTF8”。

作为起点,假设在某个地方会混淆,那么您的数据库字符集、NLS_LANG设置和OS字符集是什么?您可以添加一个示例控制文件和虚拟数据来演示该问题吗?或者,如果文件可以放在服务器上,您是否可以使用外部表而不是SQL*加载器查看它是否被接受?请将该信息添加到问题中,作为对其的编辑,可以将其格式化为可读,而不是作为注释。您还需要操作系统字符集和NLS_LANG环境变量。(或者SQL*Plus中的nls_session_参数与您运行SQL*Loader的帐户相同,但nls_LANG较短)谢谢@AlexPoole,我已经更新了这个问题,您可以尝试将nls_LANG设置为
“SPANISH_SPANISH.UTF8”
?这对我来说是可行的,但我是在Linux下运行的,所以我无法验证它是否适用于您的Windows环境…非常感谢。它起作用了!