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エラーメッセージとエラーコードを取得してリターンします。
この辺は、スケルトンコードとして整備しておきたいなぁ。
コメント