PL/SQL実行マクロ
先日、PL/SQLのスクリプトをSQL*Plusで実行するバッチを書いたが、
サクラエディタのマクロでやれば早いことに気づいた。
ので、ざくっと作成。言語はJScript(≠JavaScript)
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();