概要
バッチファイルから SQL*Plusを起動し、実行結果をバッチファイルに戻す方法。
※1レコード、1カラムのみ
※1レコード、1カラムのみ
はじめに
バッチ処理を作っていて、下記の様な制御が必要になりました。
-------------------------------------------------
テーブルHOGEにステータスXXXのレコードが
1件以上ある → 次の処理を実行
1件未満 → 5分待機して再度検索
-------------------------------------------------
SQL*Plusをバッチで呼び出して、結果をバッチ内の変数に格納した話です。
-------------------------------------------------
テーブルHOGEにステータスXXXのレコードが
1件以上ある → 次の処理を実行
1件未満 → 5分待機して再度検索
-------------------------------------------------
SQL*Plusをバッチで呼び出して、結果をバッチ内の変数に格納した話です。
実装方法
バッチファイル
select.sql
@echo off rem ORACLE接続情報 set connection=user/password rem SQLを実行 sqlplus.exe -s %connection% @.\select.sql set result=%ERRORLEVEL% if %result% geq 1 (rem SELECT結果が1件以上ある場合 処理Aの内容 ) else ( timeout 300 call %0 ) exit
select.sql
VARIABLE cnt NUMBER;
DECLARE
BEGIN
SELECT
COUNT(1) INTO :cnt
FROM
HOGE_TABLE
WHERE STATUS = 'XXX'
END;
/
EXIT :cnt
/
バッチファイルでは戻り値を変数ERRORLEVELで扱うので、こういうことができるらしいです。
1レコード/1カラム限定なので用途は限られますが、PL/SQL書くほどでもないって時には便利です
セミコロン足りなくないですか?
返信削除