バッチ処理で 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エラーメッセージとエラーコードを取得してリターンします。

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

速攻でメモできる QuickNote リリースしました!

QuickNoteは動作が超軽量でサクサクかけるノートアプリです。一瞬の閃きを逃さずにノートを開き書き始めることができます。 アカウント登録も不要です。お試しあれ!

Excel操作をコマンドで! proBoarderExcel

Excelはマウスで操作するのが基本ですが、マウス操作に疲れてはいませんか? キーボードでExcel操作ができるようになるアプリです。オープンソースで無料です。

積み上げ! Daily Stack リリースしました!

Daily Stack は日々の積み上げを管理するToDoアプリです。過去の積み上げの振り返りだけでなく、ツイート機能もあります。 アカウント登録不要ですぐに使い始めることができます。

ExecNote.app リリースしました!

ExecNoteは、コードが実行できるMarkdownアプリケーションです。Markdownドキュメント内に記載したコードをクリックすると実行ができます。わざわざターミナルを 起動させる必要がありません!無料ですのでもしよければダウンロードをお願いします。

About Me

11年目のシステムエンジニアです。アプリで生活や仕事を改善したい🐱仕事効率化、自動化のアプリ開発が得意です、ご相談ください。 🚀エンタメ系アプリの開発も模索中🐬社内SEや個人アプリ開発者、システムエンジニアになりたい人と繋がりたい🐱