LastUpdate: 2019/06/05 23:45:37

戻る

http://www.shift-the-oracle.com/inside/direct-pass-insert.html


 

サンプルテーブル

CREATE TABLE SHODAI.TEST2
(
    KEY                            CHAR(4),
    DATA1                          NUMBER(10,0),
    DATA2                          CHAR(20),
    DATA3                          CHAR(1000)
)
/

 

ほげほげ…と書きましょう


いろんな例 カンマ区切をそのまま入れる

set USERID="iii/ppp@ORA"  

sqlldr userid=%USERID%  control='TBL00ABC.CTL' skip=1 log=TBL00ABC.log direct=true

 

LOAD DATA
INFILE 'TBL00ABC.DAT'
TRUNCATE
PRESERVE BLANKS
INTO TABLE TBL00ABC
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
  "項目名1",
  "項目名2",
  "運用開始日",
  "運用終了日",
  "金額"
)

 

いろんな例 データファイルをコマンラインから強制指定する

set USERID="iii/ppp@ORA"  

sqlldr userid=%USERID%  control='TBL00ABC.CTL' skip=1 log=TBL00ABC.log direct=true DATA=ABC.TXT

 

LOAD DATA
INFILE 'TBL00ABC.DAT'
TRUNCATE
PRESERVE BLANKS
INTO TABLE TBL00ABC
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
  "項目名1",
  "項目名2",
  "運用開始日",
  "運用終了日",
  "金額"
)

 


日付項目の入れ込みの例

4;4;4;4;;;
2;2;2;20;ABC;20080101000000;
3;3;3;30;ABCDEFGHIJ;20081231010101;
1;1;1;10;;99991231235959;
LOAD DATA
INFILE 'TEST01.DAT'
APPEND
INTO TABLE TEST01
FIELDS TERMINATED BY ";" 
TRAILING NULLCOLS
(
  "KEY1",
  "DATA1",
  "DATA2",
  "DATA3",
  "DATA4",
  "DATA5" DATE "yyyyMMddhh24miss"
)


システム日付の決め打ち

LOAD DATA
INFILE 'TEST01.DAT'
APPEND
INTO TABLE TEST01
FIELDS TERMINATED BY ";" 
TRAILING NULLCOLS
(
  "KEY1",
  "DATA1",
  "DATA2",
  "DATA3",
  "DATA4",
  "DATA5" DATE "yyyyMMddhh24miss"
  "DATA6" "SYSDATE"
)

SYSDATE の後にも項目が続く場合…など、
項目の並びとしては、SYSDATEの分も、項目が必要に思われる。空文字でも良いから、DATE6に相当する項目を用意しておけ

4;4;4;4;;;;あ;
2;2;2;20;ABC;200801010000;;あ;
3;3;3;30;ABCDEFGHIJ;20081231010101;;あ;
1;1;1;10;;99991231235959;;あ;
LOAD DATA
INFILE 'TEST01.DAT'
APPEND
INTO TABLE TEST01
FIELDS TERMINATED BY ";" 
TRAILING NULLCOLS
(
  "KEY1",
  "DATA1",
  "DATA2",
  "DATA3",
  "DATA4",
  "DATA5" DATE "yyyyMMddhh24miss",
  "DATA6" "SYSDATE",
  "DATA7"
)


データファイルは、ブランク(空カンマ)になっている項目に対し、システム日付の埋め込み
その2 上の例でできない時は…下記のように

  (
  …
  "なんとか区分",
  "更新日付" DATE "yyyy/MM/dd hh24:mi:ss" "to_char(SYSDATE,'yyyy/MM/dd hh24:mi:ss')",
  "なんとかID",
  …

この例は PRESERVE BLANKS が無い時の例だ。PRESERVE BLANKS をつけていれば、   "DATA6" "SYSDATE", のような記述でいける!


空白を空白のデータとして みなすようにするには

PRESERVE BLANKS

LOAD DATA
INFILE 'TEST01.DAT'
APPEND
PRESERVE BLANKS
INTO TABLE TEST01
FIELDS TERMINATED BY ";" 
TRAILING NULLCOLS
(
  "KEY1",
  "DATA1",
  "DATA2",
  "DATA3",
  "DATA4",
  "DATA5" DATE "yyyyMMddhh24miss",
  "DATA6" "SYSDATE",
  "DATA7"
)

http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19211-01/ldr_field_list.html#15398

PRESERVE BLANKS を指定する順番は、微妙に影響があるみたい…詳細は未調査


戻る