概要
バッチファイルから  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書くほどでもないって時には便利です
 
 
セミコロン足りなくないですか?
返信削除