Windows+Oracle batから SQL*Plusを実行し、SELECT結果をbat内の変数に設定する

概要

バッチファイルから  SQL*Plusを起動し、実行結果をバッチファイルに戻す方法。
※1レコード、1カラムのみ

はじめに

バッチ処理を作っていて、下記の様な制御が必要になりました。
-------------------------------------------------
 テーブルHOGEにステータスXXXのレコードが
   1件以上ある → 次の処理を実行
   1件未満 → 5分待機して再度検索
-------------------------------------------------
SQL*Plusをバッチで呼び出して、結果をバッチ内の変数に格納した話です。

実装方法

バッチファイル
@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書くほどでもないって時には便利です

0 件のコメント :

コメントを投稿