SQL*Plusのもっさいウインドウを常時表示させとくのはウザいので。
一時ファイルにカレントのファイル名と quit コマンドを書き出して、
それをSQL*Plusに渡す。出力はアウトプットウィンドウへ。
接続情報を対話式で入力できたらいいんだけど。
var SQLPLUS_HOME = "C:\\oracle\\product\\x.x.x\\OraHome\\BIN";
var TMP_FILENAME = "temp.sql";
var USER = "USER";
var TNS = "TNS";
var PWD = "PASSWORD";
var WshShell;
var objFso;
var objOutput;
var tempFilePath;
// Shellオブジェクトを取得
WshShell = new ActiveXObject("WScript.Shell");
// 一時ファイル名を決定
tempFilePath = WshShell.ExpandEnvironmentStrings("%TEMP%") + "\\" + TMP_FILENAME;
// 出力ストリームを開く(上書き)
objFso = new ActiveXObject("Scripting.FileSystemObject");
objOutput = objFso.CreateTextFile(tempFilePath , true);
// 一時ファイルにSQLスクリプトを出力
objOutput.WriteLine("set LINESIZE 20000;"); // select実行時に悲しいことにならないように
objOutput.WriteLine("ALTER SESSION SET PLSQL_WARNINGS='ENABLE:ALL';"); // PL/SQLのコンパイル警告は全部見たい
objOutput.WriteLine("start " + Editor.ExpandParameter("$F") + ";"); // ファイルを実行
objOutput.WriteLine("show errors;"); // コンパイルエラーがあれば表示
objOutput.WriteLine("quit;");
// 出力ストリームを閉じる
objOutput.close();
objOutput = null;
// 本当はここらへんでアウトプットウィンドウをクリアしたい
// 一時ファイルをSQL*Plusで実行(アウトプットウィンドウに標準出力を得る)
Editor.ExecCommand(SQLPLUS_HOME + "\\sqlplus.exe " + USER + "/" + PWD + "@" + TNS + " @" + tempFilePath, 1);
objFso = null;
WshShell = null;
// 一応アウトプットウィンドウをアクティブにしておく
Editor.ActivateWinOutput();