Oracle ストアド・プロシージャの呼び出し方と OUT パラメータの使い方

Oracle ストアド・プロシージャの呼び出し方と OUT パラメータの使い方

Oracle データベースのストアドプロシージャの呼び出し方と、OUT パラメータの使い方を解説します。SQL*Plus でも実行可能ですし、他の Oracle 接続ツールでも実行可能です。

またここでは2種類のプロシージャの呼び出し方を解説します。1つは単純にストアドプロシージャを呼び出すもので、もう1つは無名 PL/SQL ブロックを使ったストアドプロシージャの呼び出し方です。



テスト用のストアドプロシージャ作成

ここではストアドプロシージャの呼び出しを行うため、テスト用のプロシージャを作成します。このプロシージャは与えられた数値を2倍にして返すプロシージャで、最初の IN パラメータ(PARAM_IN)で数値を受取り、PARAM_OUT という OUT パラメータで2倍になった数値を呼び出し元に返します。

-- 与えられた数値を2倍にして返却するプロシージャ
CREATE OR REPLACE PROCEDURE sample_proc
  (PARAM_IN IN NUMBER, PARAM_OUT OUT NUMBER)
AS
BEGIN
  PARAM_OUT := PARAM_IN * 2;
END;
/

ストアドプロシージャを呼び出す

ストアドプロシージャを呼び出すには、まず最初に OUT パラメータの値を受け取る変数を定義します (VARIABLE x NUMBER)。そしてストアドプロシージャを EXEC で呼び出し、最後に PRINT 文で変数の中身を画面に表示します。

-- プロシージャを呼び出した結果を保存する変数を定義
VARIABLE x NUMBER

-- 必要に応じてあらかじめ初期値を設定しておくことも可能
EXEC :x := -1

-- ストアドプロシージャの呼び出し
EXEC sample_proc(10, :x)

-- 変数値を画面に表示
PRINT x

20

無名 PL/SQL ブロックを使ってストアドプロシージャを呼び出す

今度は同じストアドプロシージャを無名 PL/SQL ブロックを使って呼び出してみます。無名 PL/SQL ブロックを使うと、全てのコマンドを1つにまとめることが出来るので便利です。

-- PL/SQL の標準出力を有効にする
SET SERVEROUTPUT ON

-- PL/SQL 無名ブロックを使って関数を呼び出す
DECLARE
  x NUMBER;
BEGIN
  sample_proc(20, x);
  dbms_output.put_line( x );
END;
/

40