今回は、OracleのSQL*LoaderでCSVファイルのデータをテーブルに追加してみたので、共有する。SQL*Loaderで使用する定義ファイルは、SQL Developerを利用して自動生成することもできる。
前提条件
Windows端末上に、Oracleをインストール済であること。また、salesテーブルを作成済であること。Oracleのインストール手順は下記記事を参照のこと。
やってみたこと
CSVファイルのデータをテーブルに追加
SQL*Loaderを利用して、CSVファイルのデータを指定のテーブルに一括で追加することができる。その手順は以下の通り。
1) 下記のディレクトリ上に、CSVファイルとSQL*Loaderで使用する制御ファイルを用意する
CSVファイル(insert_sales.csv)の内容は、以下の通り
SQL*Loaderで使用する制御ファイル(SALES_DATA_TABLE.ctl)の内容は、以下の通り
1 2 3 4 5 6 7 8 9 10 11 12 | OPTIONS (ERRORS=50) LOAD DATA CHARACTERSET UTF8 INFILE 'D:\work\sqlldr\insert_sales.csv' APPEND INTO TABLE "TEST_USER"."SALES" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' AND '"' TRAILING NULLCOLS ( "SALE_DATE" DATE "YYYY-MM-DD HH24:MI:SS" , "PRODUCT_NAME" CHAR (50), "PLACE_NAME" CHAR (12), "SALES_AMOUNT" ) |
なお、上記設定により、区切り文字:,(カンマ)、囲い文字:”(ダブルクォート)、文字コード:UTF-8のCSVファイルの取り込みが行える。
2) コマンドプロンプト上で、sqlldrコマンドを実行し、CSVファイルのデータをテーブルにコピーする。
実行するコマンドは「sqlldr (ユーザー名)/(パスワード)@(接続識別子) CONTROL=(制御ファイルへのパス) LOG=(ログファイルへのパス) BAD=(エラーファイルへのパス) skip=(読み飛ばすヘッダー行数)」である。
3) sqlldrコマンド実行後の結果は、以下の通り
1 | select * from sales |
上記で、CSVファイルのデータがテーブルに格納されたことが確認できた。
SQL*Loaderで使用する制御ファイルの自動生成
SQL*Loaderで使用する制御ファイル(SALES_DATA_TABLE.ctl)は、SQL Developerを使うと自動生成できる。ここでは、下記サイトを参考にして作成している。
https://dev.classmethod.jp/tool/easy-way-to-create-ctl-file-for-sql-loader/
1) salesテーブルを選択し右クリックし、「エクスポート(Export)」メニューを押下
2) DDLのエクスポート(Export DDL)のチェックを外し、フォーマットで「loader」を選択し、別名保存で「個別のファイル(Separate File)」を選択し、他は下記のように指定して、「次へ(Next)」ボタンを押下
3) 下記確認ダイアログが表示された場合は、「はい(Yes)」ボタンを押下
6) 下記のように、CSVファイルとSQL*Loaderで使用する制御ファイルが作成されることが確認できる
SQL*Loaderで使用する制御ファイルの内容は以下の通り
今回は、この制御ファイルを修正することで、SQL*LoaderによるCSVファイルのデータをテーブルに追加する処理を実行している。