WindowsバッチからSQLを実行ってどうやるねん。。
そんな疑問をお持ちのあなたへ、今回はバッチからSQLを実行する方法をご紹介したいと思います。
今回はOracle編なので、バッチからSQL*Plusを実行する形になります。
僕のプロフィールはこちら
バッチからSQLを実行する流れ
Oracleの場合、SQLを実行する際はSQL*Plusを利用します。
このSQL*Plusは実行時にSQLファイルを引数として渡すことができます。
つまり、SQLファイルをバッチで作成し、作成したSQLファイルをSQL*Plusに渡してあげればよいわけです。
以下が処理の流れです。
バッチでSQLファイルを作成する
↓
作成したSQLファイルをSQL*Plusに渡す
↓
SQL*Plusを実行する
↓
ログを出したい場合は適宜対応
SQLを実行するバッチのソースコード
以下がソースコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
echo off setlocal enabledelayedexpansion rem ------------------------- rem 共通変数定義 rem ※環境に合わせる事 rem ------------------------- set APP_ROOT=%~dp0 rem ------------------------- rem ORACLE接続情報 rem ※環境に合わせる事 rem ------------------------- set ORA_USER_NAME=SAMPLE set ORA_PASSWORD=SAMPLE set ORA_IP_ADDR=127.0.0.1 set ORA_PORT_NUMBER=1521 set ORA_SERVICE_NAME=SAMPLE rem ------------------------- rem 内部変数定義 rem ------------------------- set errcode=0 set msgtext=バッチ rem ------------------------- rem バッチ処理開始ログコンソール出力 rem ------------------------- echo %msgtext%開始:%date% %time:~0,8% rem ------------------------- rem sqlplus引数ファイル作成 rem ------------------------- set OUTPUT_FILENAME=%APP_ROOT%\sample.sql type nul > %OUTPUT_FILENAME% echo set echo off head off feed off recsep off >> %OUTPUT_FILENAME% echo DELETE FROM T_SAMPLE; >> %OUTPUT_FILENAME% echo exit >> %OUTPUT_FILENAME% rem ------------------------- rem sqlplus開始 rem ------------------------- sqlplus %ORA_USER_NAME%/%ORA_PASSWORD%@%ORA_IP_ADDR%:%ORA_PORT_NUMBER%/%ORA_SERVICE_NAME% @%OUTPUT_FILENAME% rem ------------------------- rem sqlplus引数ファイル削除 rem ------------------------- del %OUTPUT_FILENAME% rem ------------------------- rem 実行結果取得 rem ------------------------- set errcode=%errorlevel% rem ------------------------- rem バッチ処理終了ログコンソール出力 rem ------------------------- if %errcode% == 0 ( echo %msgtext%正常終了:%date% %time:~0,8% exit %errcode% ) else ( echo %msgtext%異常終了:%date% %time:~0,8% exit %errcode% ) |
解説
38~40行目でSQLファイルの中身を作成します。
「>>」により、追記モードでファイルに文字列を出力しています。
1 2 3 |
echo set echo off head off feed off recsep off >> %OUTPUT_FILENAME% echo DELETE FROM T_SAMPLE; >> %OUTPUT_FILENAME% echo exit >> %OUTPUT_FILENAME% |
40行目の「exit」は記載しないとSQL*Plusが終了しないので忘れないように!
45行目でSQL*Plusを実行します。
1 |
sqlplus %ORA_USER_NAME%/%ORA_PASSWORD%@%ORA_IP_ADDR%:%ORA_PORT_NUMBER%/%ORA_SERVICE_NAME% @%OUTPUT_FILENAME% |
50行目でSQLファイルを削除します。
1 |
del %OUTPUT_FILENAME% |
SQLファイルはSQL*Plusで使用するために一時的に作成しただけなので、処理終了後は削除します。
まとめ
バッチからSQLを実行する方法は、分かってしまえば比較的簡単です。
特に、バッチでファイルを作成するなど様々な処理が行えるので、バッチをうまく活用することで自由自在となります。
是非参考にしてみてください!
関連記事
以下の記事も合わせて読まれています。