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

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

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

PLSQL 実行ファイル

SET SERVEROUTPUT ON

variable RETCODE number;
variable PSTR_PARAM           varchar2(300);

execute  :PSTR_PARAM  :=  'Param1';
execute  :RETCODE  :=  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エラーメッセージとエラーコードを取得してリターンします。

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

コメント

タイトルとURLをコピーしました