【问题标题】:SQL Loader unable to load CSV file data into linux environment correctlySQL Loader 无法将 CSV 文件数据正确加载到 linux 环境中
【发布时间】:2016-07-01 09:41:30
【问题描述】:

我能够正确地将相同的逗号分隔的 csv 文件数据加载到窗口 oracle 数据库中,但在 linux 环境中,插入的记录具有奇怪的行为。例如,插入的数据具有类似 \n 的行为。我选择了记录并粘贴出来注意记录是这样的

"data
"

我使用的控制文件如下

Load DATA
REPLACE INTO TABLE TABLE_NM                             
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS

请建议我可以做些什么来使这种情况正确。提前谢谢你

【问题讨论】:

  • 请提供 CSV 文件中的几行示例数据。
  • 您可能使用了错误的格式。换行符在 windows 和 unix 中是不同的。更改格式,然后重试。
  • @JSapkota 示例数据如下 a,b,c,d a1,b2,c2,d2 a3,b3,c3,d3 这是我为 csv 文件得到的,这就是看起来像当我尝试用记事本++打开文件时

标签: linux oracle sql-loader


【解决方案1】:

这是一个经典问题,在 *nix 系统上,行以换行符结尾,但在 Windows 上,行以回车符/换行符结尾。由于您的数据以回车/换行结尾,因此在 Windows 上可以正常读取,但 Linux 会加载回车。

您可以预处理数据文件并将行(记录)终止字符替换为dos2unix 之类的实用程序,或者通过将STR 子句添加到INFILE 选项来更改控制文件以设置记录终止字符到回车:

INFILE "test.dat" "STR x'0D'" 

我会选择通过dos2unix 运行数据,以使控制文件更加通用,而不是特定于数据文件名。

【讨论】:

  • 我没有使用INFILE命令,那我应该把STR x'OD'的东西放在哪里?
【解决方案2】:

经过调查,发现问题的根本原因是提要文件不是从 Linux 基础环境生成的。因此,在我手动将文件转换为 Linux 版本后,提要文件能够毫无问题地加载到数据库中。

【讨论】:

    猜你喜欢
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    相关资源
    最近更新 更多