【问题标题】:SQL*Loader does not recognize delimiter "¥"SQL*Loader 无法识别分隔符“¥”
【发布时间】:2015-06-03 09:10:34
【问题描述】:

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

在 UTF-8 中,¥Â¥ (C2A5),但它似乎正在尝试查找 C2C2A5。

数据库设置是

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

我们正在使用西班牙语语言环境的 Windows 7 机器上的命令窗口运行 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

【问题讨论】:

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

标签: oracle utf-8 delimiter sql-loader


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 2020-12-10
    相关资源
    最近更新 更多