「送る」メニューから指定したファイルをSQL*Plusで実行する。

最近、PL/SQLの開発が多い。

ObjectBrowserやらPL/SQLDeveloperやら便利なツールがあるし、Oracle純正のツールもあるのだが、
どうもテキストエディタでしこしこ書いてしまう。
理由の一つは、矩形選択やら単語の補完やらオートインデントやら「エディタ」としての機能がどれもイマイチだから。
というわけでよっぽどバグが酷くない限りPL/SQLの開発にはサクラエディタを使っている。
サクラエディタは、F10キーでSQL*Plusにファイルパスを渡して実行してくれて大変便利だが、あらかじめSQL*Plusを起動しておかなければならない。
しかも、当然だが実行したいファイルを開いている必要がある。ちょっとスクリプトを流したいときにめんどくさい。
なんとかエクスプローラからサクっと実行できないものか……。

というわけでバッチを書いてみた。

(エライ人の打ち合わせ待ちの暇潰しなのはないしょ)

SQL*Plusでファイルに保存してあるスクリプトを実行するには、

$ sqlplus user@dsn/password @filename.ext

とする。
と、ここまではいいのだが、スクリプトファイルの末尾に「quit」もしくは「exit」が記述されていないと
SQL*Plusが開きっぱなしになってしまって具合が悪い。
諸々の事情で全てのファイルの末尾にquitと書いて回るわけにもいかない。(それはそれで面倒だし)
う〜ん……。

苦しい策だが、

$ sqlplus user@dsn/password @hoge.sql

として、hoge.sql内に以下のように記載することにする。

start foo.sql;
start bar.sql;
quit;

このhoge.sqlを生成してSQL*Plusに渡すバッチを書く。
やっつけでこんな感じか。複数ファイルにも対応できているはず。

@echo off

set TEMP_PATH=C:\temp
set SQLPLUS_HOME=C:\oracle\product\xx.x.xx\OraHome\BIN
set USER=user_name
set DSN=tns_name
set PASSWORD=password

echo -- created on %DATE% %TIME%>%TEMP_PATH%\temp.sql

:ADD_FILE
echo start %1;>>%TEMP_PATH%\temp.sql
shift
if "%1"=="" goto RUN
goto ADD_FILE

:RUN
echo quit;>>%TEMP_PATH%\temp.sql
call %SQLPLUS_HOME%\sqlplus.exe %USER%@%DSN%/%PASSWORD% @%TEMP_PATH%\temp.sql

pause

うまく動くかどうかは明日検証予定。
→期待通りの動作だった。ただ、元のスクリプトファイルがきちんとデリミネータ(デフォルトではセミコロン)で終了されている必要がある。