バッチ処理で Oracle PLSQL を実行してリターンコードを得る

Oracle PLSQL は VB.net などのプログラムから実行することもあれば、Windowsバッチなどのスクリプト言語で
バッチ処理で実行することもあると思います。

この記事では、バッチ処理で PLSQL を実行してリターンコードを得る方法を記載します。

PLSQL 実行ファイル

SET SERVEROUTPUT ON

variable num number;
variable PSTR_PARAM           varchar2(300);

execute  :PSTR_PARAM  :=  'Param1';
execute  :num  :=  PlsqlBody.PlsqlFunction(:PSTR_PARAM);

COMMIT;

exit :num

SET SERVEROUTPUT ON で、 標準出力に出力された値を出力します。

Oracle PLSQL では、dbms_output.put_line() で標準出力に出力します。

variable num number;
variable PSTR_PARAM           varchar2(300);

ここで、変数を定義しています。

  • num は PLSQL のリターンコードを格納する変数です
  • PSTR_PARAM は PLSQL の引数です。
execute  :PSTR_PARAM  :=  'Param1';
execute  :num  :=  PlsqlBody.PlsqlFunction(:PSTR_PARAM);

execute で 処理を実行します。
1行目は PSTR_PARAM に値を格納しています。
2行目は PlsqlBody.PlsqlFunction() を実行してリターンコードを num に格納しています。

COMMIT;

トランザクションをコミットします。

exit :num

exitコマンドに与えられた数値をリターンコードとし、 PLSQL処理を終了します。

Windows バッチファイル側の記述

Windows バッチ側では以下のように記述して呼び出します。

SQLPLUS ユーザーID/パスワード@SID  PLSQL実行ファイルパス  >> 標準出力の出力先

ちなみに、PLSQL側でリターンコードの返し方

RETURN 0;

とすれば、 0 が返ります。

RETURN 1;

とすれば、 1 が返ります。

ちなみに② Exception の書き方

    EXCEPTION
        WHEN OTHERS THEN
             dbms_output.put_line('SQLCODE : ' || SQLCODE);
             dbms_output.put_line('SQL ERROR MESSAGE : ' || SQLERRM);

            RETURN SQLCODE * (-1);

とすれば、SQLエラーメッセージとエラーコードを取得してリターンします。

この辺は、スケルトンコードとして整備しておきたいなぁ。

返信を残す

メールアドレスが公開されることはありません。