「送る」メニューから指定したファイルを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
うまく動くかどうかは明日検証予定。
→期待通りの動作だった。ただ、元のスクリプトファイルがきちんとデリミネータ(デフォルトではセミコロン)で終了されている必要がある。