0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQL*Loaderの制御ファイルの個人的に忘れがちな機能

Last updated at Posted at 2025-08-09

SQL*Loaderを利用するにあたって、制御ファイルの個人的に忘れがちな機能を自分用にメモしておきます。

例: employee1.csvとemployee2.csvをemployeeテーブルにロードする

employee.ctl
    OPTIONS ( 
     SKIP = 1,
      LOG = 'employee.log'
    )
    LOAD DATA
    CHARACTERSET UTF8
1   INFILE       'employee1.csv' 
1   INFILE       'employee2.csv'
    BADFILE      'employee.bad'
    DISCARDFILE  'employee.dis'
    TRUNCATE INTO TABLE employee
2   TIMESTAMP FORMAT 'YYYY/MM/DD HH24:MI:SS'
    FIELDS TERMINATED BY ','
    (
3     employee_id  SEQUENCE(100, 1),
4     first_name   "UPPER(:first_name)",
5     middle_name  FILLER,
      last_name,
6     updated_date SYSDATE,
7     updated_user CONSTANT 'SYSTEMUSER'
    )
  1. INFILEは複数指定することができます
  2. DATE型・TIMESTAMP型のフォーマットを指定したい場合はDATE FORMATTIMESTAMP FORMATを指定します。
  3. 連番を発番したい場合はSEQUENCEを指定します
    • RECNUMを利用すると、連番の発番に入力ファイルの行数を参照することもできます
  4. ダブルクォートで囲むことで、SQL関数を利用することができます
    • バインド変数で指定できるものには制約があります。たとえばFILLERを指定したフィールドはバインド変数に指定できません
    • バインド変数は必須ではありません (例 update_date "TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS')")
  5. 読み飛ばしたいフィールドがある場合は、FILLERを指定します
  6. 現在時刻を参照したい場合は、SYSDATEを指定します
  7. 固定値を指定したい場合は、CONSTANTを指定します

これ以外にもSQL*Loaderにはさまざまな機能が用意されています。SQL*Loaderの利用で何か困ったら、以下のドキュメントをざっと読むとよいかと思います。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?