Oracle/SqlLoder †SQLLoder †$ sqlldr <UID>/<PASS>@<識別子> control=<コントロールファイル名> 特定の書式(カンマ区切りなど)で記載されたテキストデータを高速にテーブルへ投入できる コントロールファイル †OPTIONS ( DIRECT = TRUE, -- ダイレクトインサートモードを使用 ) LOAD DATA INFILE 'ファイル名' <投入モード> INTO TABLE テーブル名 FIELDS TERMINATED BY '区切り文字' ( カラム名 [追加指定] [,カラム名 [追加指定]] ) OPTIONS †
LOAD DATA †
サンプル †テーブル作成 †CREATE TABLE SCOTT.TEST ( NAME VARCHAR2(20), BIRTHDAY DATE, AGE NUMBER(3) ) データ(TEST.DAT) †川澄,1987/11/29 05:42:11,25 琴乃宮,1987/02/15 02:22:12,25 松永,1987/03/02 14:12:15,25 コントロールファイル(TEST.CTL) †OPTIONS ( DIRECT = TRUE, ) LOAD DATA INFILE 'TEST.DAT' APPEND INTO TABLE TEST FIELDS TERMINATED BY ',' ( NAME, BIRTHDAY DATE "YYYY/MM/DD HH24:MI:SS", AGE DECIMAL EXTERNAL ) データ投入 †sqlldr scott/scott@orcl control=TSET.CTL 実行結果はログに出力される。.bat のファイルがある場合は投入失敗したレコードが記録されている
外部表 †CSVファイルなどの外部ファイルから直接データを読み込んで表示することが出来るテーブル(テーブルの実体は持たない) -- ディレクトリオブジェクトの作成 create directory OUTTBL AS '/home/oracle/outtbl'; -- ディレクトリオブジェクトへのアクセス権限を付与 grant read,write on directory OUTTBL to SCOTT; -- テーブルの作成 create table SCOTT.TEST ( NAME CHAR(20), BIRTHDAY DATE ) organization external ( type oracle_loader default directory "OUTTBL" access parameters ( records delimited by newline badfile "OUTTBL":'BAD.log' discardfile "OUTTBL":'DISCARDFILE.log' logfile "OUTTBL":'LOGFILE.log' fields terminated by ',' missing field values are NULL ( NAME CHAR(20), BIRTHDAY char date_format date mask "YYYY/MM/DD HH24:MI:SS" ) ) location('TEST.CSV') ); -- 作成したテーブルにアクセス(実際はテキストファイルにアクセスし内容を表示している) select * from SCOTT.TEST; NAME BIRTHDAY -------------------- ------------------- 川澄 1987-11-29 05:42:11 琴乃宮 1987-02-15 02:22:12 松永 1987-03-02 14:12:15 |