1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SQL*Loaderに改行コードが含まれたCSVファイルの取り込み

Posted at

はじめに

自社開発のアプリケーションで、ExcelファイルのデータをCSVに変換後に内部でSQL*LoaderによりOracleの指定テーブルに登録する処理があります。登録したテーブルのデータを使用する別のアプリケーション側でエラーになったことから調査の依頼がありました。

調査

登録されたテーブルのデータを調べると、改行コードが含まれていました。テーブルのデータを条件により抽出してJSONに格納しているため、改行コードが含まれていると別の行としておかしなデータになってしまうことでエラーになることが分かりました。

このテストを行うにあたり、Excelファイルの改行コードを含めてSQLLoaderにOracleの指定テーブルに登録しようとすると、そもそもSQLLoader側でエラーになり登録できません。でも、現実的には改行コードが含まれて登録することができています。

先頭行の改行コード

一体何が違うのか調べてみると、先頭行に改行コードがあるとエラーになり、先頭行に改行コードが無ければ2行目以降に改行コードがあっても登録できることが分かりました。

先頭行に改行コードが無いダミーデータを登録して、後でダミーデータを削除するといいかも知れません。

最後に

UTF-8で登録しているなど他と異なるので参考になるかは分かりませんが、実体験としてあったので備忘録として書いてみました。

test.bat
SQLLDR fuga/fuga@hoge control=test.ctl errors=9999
test.ctl
LOAD DATA
CHARACTERSET AL32UTF8
INFILE 'test.csv'
APPEND
INTO TABLE TEST
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(AA,AB,AC,AD)

改行コードが含まれているデータは2重引用符で囲んでいます。

test.csv
01,K,T,1
02,"K
","T
",2

参照

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?