【ORACLE】SQL*Plus、SQL*Loader

tnsnames.ora

ネットサービスの接続情報を定義するファイル

① =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ②)(PORT = ③))
    (CONNECT_DATA =
      (SERVICE_NAME = ④)
    )
  )

①ネットサービス名(接続文字列)
  任意の名前にする
  この名前はsqlplus hoge/hoge@接続文字列 のようにアプリで使用される
②DBサーバのホスト名またはアドレス
  例.localhostや192.168.111.222など
③DBサーバのポート番号
  意図的に変更してなければ1521を指定する
④サービス名(接続識別子)
  SID名やPDB名を指定

[ファイルの場所]
 %ORACLE_HOME%\network\admin
CMDで「tnsping (ネットサービス名)」

SQL*Plus

概要

SQLを実行する

使い方
--パスワードを一緒に入力する方法
sqlplus ユーザ名/パスワード@接続文字列
--パスワードを非表示で入力する方法(パスワードを入力してください が表示される)
sqlplus ユーザ名@接続文字列

--これでも可
sqlplus /nolog
connect ユーザ名/パスワード@接続文字列
SQLファイルを実行する

前提:文字コードと改行コードを実行環境に合わせること

Windows環境 Linux環境
文字コード Shift_JIS UTF-8
改行コード CRLF(¥r¥n) LF(¥n)

①実行したいファイルを格納したディレクトリでSQLPlusを実行する
@sqlファイル名 を実行する

SQL*Loader

概要

 外部ファイル(CSV, Text等)のデータを取り込む

使い方
sqlldr ユーザ名/パスワード@接続文字列 control='Sample.ctl'
コントロールファイル
OPTIONS(LOAD=-1, SKIP=0, ERRORS=0, ROWS=-1)

LOAD DATA
  INFILE 'sample.csv'
  APPEND
  --PRESERVE BLANKS

INTO TABLE sample_table
  WHEN (COL1 = 'A01') AND (COL2 != '10')
FIELDS TERMINATED BY ","
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS

(
 COL1,
 COL2,
 COL3
)

【OPTIONS】
コマンドライン引数でも指定可能。コマンドライン引数が優先される

--省略した場合のデフォルトの設定値
OPTIONS(LOAD=-1, SKIP=0, ERRORS=50, ROWS=64)

--コマンドライン引数で使用する場合
sqlldr usr/pass@db control='Sample.ctl' skip=1 rows=100

LOAD:読み込み件数(-1で全件)
SKIP:スキップする件数(1で1行目をスキップ)
ERRORS:エラー許容数(0でエラー許可しない、-1でエラー無視→ver11以下のみ)
ROWS:コミットするタイミング(1で1件ずつ、-1で全件一括)

【LOAD DATA 】
固定

【INFILE、BADFILE、DISCARDFILE】

INFILE 'sample2.csv'
INFILE 'c:/sample.csv' BADFILE 'c:/sample.bad' DISCARDFILE '../data/sample.dsc'

INFILE:入力ファイル
BADFILE :(省略可能)入力できなかったデータを出力したファイル
DISCARDFILE:(省略可能)WHENではじかれたデータを出力したファイル

※入力ファイルを複数指定可能
※パスを指定しない場合はLoaderを実行したディレクトリを指す
※BADFILEとDISCARDFILEは出力対象が1件以上ある場合のみ出力される

【(ロードタイプ)APPEND、INSERT、REPLACE、TRUNCATE】
APPEND:テーブルにデータを追加。重複しないレコードのみが追加される
INSERT:テーブルにデータを追加。テーブルが空でない場合はエラー
REPLACE:テーブルのデータをすべて削除してから追加。エラー時はロールバックされる
TRUNCATE:テーブルのデータをすべて削除してから追加。エラー時はロールバックされない

※ロードタイプを指定しない場合はINSERTになる

【PRESERVE BLANKS】
通常空白文字は切り捨てられるが、これを行わないようにする場合に記述
カンマの前後の空白を除去しない(空白を残す)

【INTO TABLE】

INTO TABLE sample_table

ロード先のテーブル名を指定する

【WHEN】

WHEN (COL1 = 'A01') AND (COL2 != '10')

データのロード条件。使える条件は =、!=、AND
この条件によって廃棄されたデータは、DISCARDFILEに出力される

【FIELDS TERMINATED】

--カンマ区切りの場合
FIELDS TERMINATED BY ","

--タブ区切りの場合
FIELDS TERMINATED BY X'09'

入力データの区切り文字を指定
※固定長ファイルの場合は不要

【OPTIONALLY ENCLOSED】

--ダブルクォーテーションで区切られている場合
OPTIONALLY ENCLOSED BY "'"

入力データの囲み文字を指定。囲まない場合は不要

【TRAILING NULLCOLS】
データの無い項目にNULLを入れる。NULLを入れない場合は不要

【(項目名)】
ロード先のテーブルの項目名

雛形(タブ区切り)
OPTIONS(LOAD=-1,SKIP=0,ERRORS=0,ROWS=-1)
LOAD DATA  
INFILE 'sample.csv'  --要確認
APPEND  --要確認
INTO TABLE sample_table  -要確認
FIELDS TERMINATED BY X'09'
TRAILING NULLCOLS
(
 COL1,  --要確認
 COL2,
 COL3
)
雛形(カンマ区切り、ダブルクォーテーション区切りあり)
OPTIONS(LOAD=-1,SKIP=0,ERRORS=0,ROWS=-1)
LOAD DATA  
INFILE 'sample.csv' --要確認
APPEND  --要確認
INTO TABLE sample_table --要確認
FIELDS TERMINATED BY ","
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
 COL1, --要確認
 COL2,
 COL3
)
雛形(カンマ区切り、ダブルクォーテーション区切りなし)
OPTIONS(LOAD=-1,SKIP=0,ERRORS=0,ROWS=-1)
LOAD DATA  
INFILE 'sample.csv' --要確認
APPEND  --要確認
INTO TABLE sample_table --要確認
FIELDS TERMINATED BY ","
TRAILING NULLCOLS
(
 COL1, --要確認
 COL2,
 COL3
)