PL/SQLでストアドプロシージャからの戻り値を取得する(PROCEDURE)
Oracleでストアドプロシージャからの戻り値を取得したい場合、出力用のパラメータ(OUT)を用意します。ファンクションのようにRETURNで戻り値を返すようなことはできないので注意が必要です。
基本的なストアドプロシージャの例
戻り値を取得するために引数にOUTを指定したストアドプロシージャの例を以下に示します。
CREATE OR REPLACE PROCEDURE GET_TAX_PRICE(
price NUMBER,
tax_price OUT NUMBER
) IS
tax_rate NUMBER := 0.08;
BEGIN
DBMS_OUTPUT.PUT_LINE('procedure start');
tax_price := price + ROUND(price * tax_rate);
DBMS_OUTPUT.PUT_LINE('procedure end');
EXCEPTION
WHEN OTHERS THEN
tax_price := 0;
DBMS_OUTPUT.PUT_LINE('procedure error');
END;
上記は、受け取った金額を税込み価格に変換するストアドプロシージャになります。
ファンクションと構成が違いますが、違うのは引数の中に「OUT」で出力用の引数を指定しているところです。
ストアドプロシージャの呼び出し方
作成したストアドプロシージャの呼び出し方、OUTパラメータにセットした内容を取得するPL/SQLは以下の通りです。
SET SERVEROUTPUT ON;
DECLARE
tax_price NUMBER := 0;
BEGIN
GET_TAX_PRICE(100, tax_price);
DBMS_OUTPUT.PUT_LINE(tax_price);
END;
ストアドプロシージャを実行してみた結果。
なお、以下のような書き方も可能です。
SET SERVEROUTPUT ON;
VARIABLE tax_price NUMBER;
EXEC :tax_price := -1;
EXEC GET_TAX_PRICE(100, :tax_price);
PRINT tax_price;
以前、仕事でやったはずなんですが、だいぶ前だったので、OUTパラメータで戻り値を取得するやり方を完全に忘れていました。皆さんはやったら忘れない様にすぐにメモしておきましょう。