LoginSignup
4
4

More than 5 years have passed since last update.

Sql Loader CSVで最終列が空白だと列が見つかりません旨のエラーが出る。

Posted at

Sql Loaderで読み込みをしたところ最終列が空白の行の場合に、列が見つかりませんでしたというエラーが出た。
環境:Oracle 11g
※環境が手元にないのでコードは未テストです。

エラーの内容

以下のようなCSVをSQL Loaderにて取り込むと下記のエラーが出る。

3行目の4列目は空文字

sample.csv
列A,列B,列C,列D
A1,B1,C1,D1
A2,B2,C2,D2
A3,B3,C3,

テーブルの定義

sampleTable
列A 列B 列C 列D

「拒否されました。- 表テーブル名,列列Dでエラーが発生しました。
論理レコードが終了する前に列が見つかりませんでした。(TRAILING NULLCOLSを使用)」

原因

CSVのデータを読み取りそれをテーブルの列にマッピングしているらしい。

上記のエラーはつまり列Dに対応するCSVのデータが見つからなかったということを言っている。

解決法

TRAILING NULLCOLSとNVLを使うことで列として認識させることができた。CTLファイルは下記のような感じ。

sample.CTL
省略 
FIELDS TERMINATED BY "," TRAILING NULLCOLS
(
 列A "NVL(:列A, ' ')"
,列B "NVL(:列B, ' ')"
,列C "NVL(:列C, ' ')"
,列D "NVL(:列D, ' ')"
)

TRAILING NULLCOLSで空文字の列でもNULLの値が読み取られるようになり、NULLがNVLで' 'に変わるという仕組みになっている。

4
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
4
4