◀マクロトップへ
  • 477 SQL*Plusで編集中のファイルを実行してアウトプットウィンドウに出力
  • [477] SQL*Plusで編集中のファイルを実行してアウトプットウィンドウに出力 foohogehoge 2009年10月20日 22:04

    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();