C#からSQLLDRを起動し、戻り値(終了コード)を確認する

Visual Studio 2005 C#からOracle SQLLDR SQL*Loader を起動し、戻り値(終了コード)を確認するまでのサンプルコードをφ(..)メモメモ

//SQLLDRで生成される結果ファイルを削除しておこう
System.IO.File.Delete([出力ログファイル名]);
System.IO.File.Delete([BADFILE名]);  //コントロールファイルとあわせておこう
System.IO.File.Delete([DISCARDFILE名]);  //コントロールファイルとあわせておこう

// SQLLDRの実行
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.WorkingDirectory = Application.StartupPath;
p.StartInfo.FileName = "sqlldr.exe";  //実行するのはコレ
string arg = "userid=[ID]/[パスワード]@[SID]" //必要なパラメータ
arg += " data=[入力CSVファイル] log=[出力ログファイル名]"
arg += " control=[コントロールファイル]"

p.StartInfo.Arguments = args
p.Start();           //ここで実行
p.WaitForExit();     //終了まで待つ これがないと、怖いよ

//実行結果を確認 戻り値(終了コード)
int procExitCode = p.ExitCode;
if (procExitCode != 0)
{
//正常終了だっだらの処理
}

前提条件は、コマンドプロンプトで SQLLDR ができること。実行パス(Application.StartupPath)にコントロールファイルがあること。

戻り値(終了コード)一覧

内容
0 正常終了
1 コントロールファイルが無い
パラメータエラーのときログインエラーのとき
パラメータエラーのとき
2 BADFILEが出力されたとき
DISCARDFILEが出力されたとき
4 ログファイルが読み取り専用で出力できないとき

(結果に自信は無いので、確認して下さい)

Oracleヘルプではこの辺に書かれてました。
Oracle Database ユーティリティ 10g リリース2(10.2)
7 SQL*Loaderコマンドライン・リファレンス
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19211-01/ldr_params.html#1087966

コントロールファイル(通常 拡張子.ctl)はこんな感じ

LOAD DATA BADFILE [BADFILE名] DISCARDFILE [DISCARDFILE名]
TRUNCATE INTO TABLE [出力テーブル名]
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
( FLD1, FLD2 ... )

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です