Process/ProcessStartInfoからsqlplus.exeを実行しています。 SQLエラーがある場合、正しいゼロ以外の終了コードが得られます。しかし、PL SQLコンパイル・エラーが発生した場合、終了コードとして0(成功)が返されます。Process/ProcessStartInfoからsqlplus.exeを実行し、PL SQLコンパイルエラー時にエラーコードを返す
PL SQLコンパイルエラーが発生した場合、ゼロ以外の終了コードを取得する方法を教えてください。
私はuser_errors
から数えましたが、既存のエラーが存在する可能性があるため、同じパッケージが(同じ理由で)再度失敗した場合、エラーカウントは変更されません。
public int Execute(string installFile, string instance, string userId, string password)
{
int exitCode;
ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.WorkingDirectory = workingDirectory;
processInfo.FileName = "sqlplus.exe";
processInfo.Arguments = string.Format("{0}/{1}@{2} @{3}", userId, password, instance, installFile);
processInfo.CreateNoWindow = false;
processInfo.UseShellExecute = false;
Process process = Process.Start(processInfo);
process.WaitForExit();
exitCode = process.ExitCode;
process.Close();
return exitCode;
}
これは、SQLファイルをインストールしている - 1(同一の構造と1以上が存在することができる):
foreach(var installFile in list of install files)
{
exitCode = .Execute(installFile, instance, userId, password);
if (exitCode != 0)
{
....
return -1;
}
}
パッケージ名を事前に知らなくても、パッケージのコンパイルに失敗したときにSQL * Plusを確実に終了させることはできません。プロセスの標準出力(https://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput(v=vs.110).aspx)をスキャンして、 'パッケージ本体コンパイルエラー 'で作成? –