はじめに
1万越えの大量のデータをDBに登録する必要があり、SQL*Loaderを使用してCSVで用意したデータを登録した方法を紹介します。改行を含むデータを登録する必要があり苦戦したので、改行のデータを投入する想定となります。
SQL*Loaderとは
大量のデータを高速にテーブルへ格納するためのOracle Database付属ツールです。
CSVファイルを元に一括でデータを取り込むことができます
実装方法
①制御ファイルの作成
ロードするデータの形式やロード先のテーブル情報を記述します。
name.csvに記載されているデータを「m_name」テーブルに投入するという例です
改行データの場合、どこまでを1データだと判定するかが難しく、最後に「|」という文字を追加して判定させました。この文字については登録するカラム「name」に含まれていないような文字を採用すると良いです
control.ctl
LOAD DATA
INFILE 'name.csv' "STR '|'"
INTO TABLE m_name
FIELDS TERMINATED BY ',' OPTIONAL ENCLOSED BY '"'
(
id CHAR(12),
name CHAR(300)
)
②CSVファイルの用意
name.csv
1,サンプル1。
サンプル1。|
2,サンプル2。|
つづいて、用意したデータを追加していきます
③文字コードを指定
コマンドプロンプトにて実行をしていきます
1.コメントプロンプトの文字エンコーディングをUTF-8に指定
chcp 65001
2.Oracleクライアントのセッションロケール情報を日本語、エンコーディングをUTF-8に指定
set NLS_LANG=Japanese_Japan.UTF8
④作成したコードを実行
作成したファイルが置いてあるディレクトリに移動して実行します
sqlldr userid/password@//ホスト名:ポート番号/サービス名 control=control_file.ctl log=log_file.log
- userid/password:データベースのユーザー名とパスワード
- control:制御ファイルのパス
- log:ログファイルのパス
さいごに
初のSQL*Loaderで苦戦しましたが、苦労の末無事にデータ追加ができました!
上記、参考になれば幸いです