SQL*Loader

[SQL*Loader] テーブル列を読み飛ばしてロードする

投稿日:2025年12月28日 更新日:

SQL*Loaderで、テーブル側にはあるがCSVファイルには無い列を読み飛ばして(値を設定せずに)ロードするサンプルです。

前提

以下のCSVファイルから、以下のテーブルにロードします。
テーブルには「登録日時」列がありますが、CSVファイル側にはこの列に対応するデータがありません。

(商品マスタ.csv)
商品コード,商品名,単価,適用日 1001,みかん,30,2021/1/1 1002,りんご,100,2021/1/2 1003,バナナ,200,2021/1/3
【商品マスタ】
列名
CDCHAR(4)
NAMEVARCHAR2(20)
PRICENUMBER(5,0)
TEKIYODATE
TOROKUBIDATE DEFAULT SYSDATE

「TOROKUBI」(登録日時)列には、あらかじめDEFAULTでSYSDATEが設定されています。CSVファイル側にはこの列に対応するデータはありません。

サンプル

制御ファイル(ctlファイル)

実行コマンド

実行例
C:¥>sqlldr usr01/usr01@db01 control=c:¥syohin.ctl log=c:¥商品マスタ.log

実行結果

【商品マスタ】
CDNAMEPRICETEKIYOTOROKUBI
1001みかん302021/1/12026/8/16
1002りんご1002021/1/22026/8/16
1003バナナ2002021/1/32026/8/16

「TOROKUBI」列には、CSVファイルの値ではなく、列に設定されたDEFAULT(実行日)が自動的に入っています。

解説

  • 制御ファイルの列リストに書かなかったテーブルの列は、通常のINSERT文で列を省略した場合と同じ扱いになります。列にDEFAULTが設定されていればその値が、無ければNULLが入ります。
  • この方法は、CSVファイル側に無いテーブルの列を読み飛ばしたい場合に使います。テーブルには無いのにCSVファイル側に余分な列がある場合は、この方法ではなく「FILLER」を使ってファイル側の列を読み飛ばしてください。(関連記事参照)
  • 読み飛ばした列(今回のTOROKUBI)に、DEFAULTも設定されておらずNOT NULL制約が付いている場合は、値が設定できずエラーになります。読み飛ばしたい列がNOT NULL制約付きの場合は、DEFAULTを設定しておくか、制御ファイル側でCONSTANT句などを使って固定値を設定してください。

関連記事


スポンサーリンク

スポンサーリンク

-SQL*Loader

執筆者:



comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

スポンサーリンク