2019.4.23
2020.1.7

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;

ストアドプロシージャを実行してみた結果。

procedure start
procedure end
108

なお、以下のような書き方も可能です。


SET SERVEROUTPUT ON;
VARIABLE tax_price NUMBER;
EXEC :tax_price := -1;
EXEC GET_TAX_PRICE(100, :tax_price);
PRINT tax_price;

以前、仕事でやったはずなんですが、だいぶ前だったので、OUTパラメータで戻り値を取得するやり方を完全に忘れていました。皆さんはやったら忘れない様にすぐにメモしておきましょう。

Oracle】関連記事