SQL*LoaderとOracle DatePump2
どうも、クローバーフィールドの伊関です。
なにやらブログのタイトルがゲームのナンバリングようですが、淡々とSQLのコードを解説していくだけなので悪しからず。
さて、前回SQL*LoaderとOracle DatePump、その拡張版のアクセスドライバORACLE_LOADERとORACLE_DATAPUMP。それとOracleデータベース内での外部表について軽くまとめました。
内容に関しては以下のリンクよりご確認ください。
https://www.cloverfield.co.jp/2023/01/17/sql%ef%bc%8aloader%e3%81%a8oracle-datepump/?preview=true
前回にもありますように外部表とは実体は外部ファイル内にあり、Oracleデータベース内には存在しません。要は仮想的に作られた表にすぎません。しかしこれがないと外部データの参照も、インポートもエクスポートもできません。
今回はその外部表を通してアクセスドライバを使用するやり方を説明します。
ORACLE_LOADERアクセスドライバの外部表の例
SQL> CREATE TABLE exttbl (no NUMBER(4)
name VARCHAR2(10)
)
ORGANIZATION EXTERNAL
(
TYPE ORACLE_LOADER
DEFAULT DIRECTORY TEST_DIR
ACCESS PARAMETERS
(
fields terminated by ‘,’
)
LOCATION(‘data.csv’)
);
表が作成されました。
SQL> SELECT * FROM exttbl;
NO NAME
———- ————–
2 horie
8 leitch
15 goromaru
このようなコードを書くことで外部にあるCSVファイルを読み込み、SELECTで問合せできる外部表を作成することが出来ます。
外部表を作成するCREATE TABLE文のTYPEの指定「TYPE ORACLE_LOADER」の部分は省略でき、ORACLE_LOADERアクセスドライバを指定したことになります。
以下が用語の解説です。
・ORGANIZATION EXTERNAL
外部表を作成するための句です。
・TYPE
外部表には主に2つの型があり、アクセスドライバ(外部データを解析するAPI)によってサポートされます。
・ORACLE_LOADER:テキスト形式の外部ファイルのデータをロードする(読み込む)。デフォルト値
・ORACLE_DATAPUMP:既存の表のデータをバイナリ形式のダンプファイルにアンロード(書き込む)、ダンプファイルのデータをデータベースにロードする(読み込む)
設問のデータソースはテキストファイルなのでORACLE_LOADERを使用しますが、ORACLE_LOADERはデフォルト値なので省略できます。
・DEFAULT DIRECTORY
デフォルトで使用するディレクトリを、ディレクトリのパスではなくディレクトリオブジェクトとして指定します。LOCATION句のデータファイルやACCESS PARAMETERS句のログファイルなどのディレクトリオブジェクトを省略した場合に使用されます。DEFAULT DIRECTORYのデフォルト値は無ければ、省略できません。
・ACCESS PARAMETERS
データソースのレコードやフィールド形式などの情報を指定します。
– RECORDSパラメータ
DELIMITED BY:レコードの区切り文字の指定。デフォルト値は改行を示す「NEWLINE」
– FIELDSパラメータ
TERMINATED BY:フィールドの区切り文字の指定。デフォルト値は「’」
OPTIONALLY ENCLOSED BY:囲み文字の指定。デフォルト値は「”」
(列名 データ型):データソースの列名とデータ型の指定。省略した場合、区切り文字付きの列はCHAR(255)となる
・LOCATION
外部のデータファイルを指定します。デフォルト値は無いので省略できません。
・REJECT LIMIT
外部データの問い合わせで許容される変換エラーの数を指定します。デフォルト値は0なので省略できます。
ざっとの解説になりました。
なにぶん自分がまとめに書いてるものになりますので多少読みづらいのはご愛嬌ということで。
では