ここではOracleのストアドファンクションについて紹介します。

ストアドファンクションとは

Oracleのストアドファンクションは PL/SQL というオラクル独自の手続き型言語で記述されたプログラムです。
ストアドプロシージャとストアドファンクションの違いは、戻り値がないのがストアドプロシージャ、戻り値があるのがストアドファンクションです。

ストアドファンクションの特徴

  • RETURNで戻り値を設定することができる。
  • SQL内で呼び出すことができる。


ストアドファンクションの作成

CREATE FUNCTION文

ストアドファンクションの作成は、CREATE FUNCTION文を使用します。

構文

CREATE [OR REPLACE] FUNCTION {ストアドファンクション名}
       [({引数名} [IN | OUT | INOUT] {データ型}, ...)]
       RETURN {データ型}
    宣言部
BEGIN
    処理部
EXCEPTION
    例外処理部
END;


パラメータ・モード説明
IN呼び出し元から値を受け取るだけの引数。
OUTストアドファンクション側から呼び出し元へ値を返すだけの変数。
INOUT呼び出し元から受け取った値をストアドファンクション側で書き換えて返す変数。


以下はストアドファンクションを作成するサンプルです。

CREATE OR REPLACE FUNCTION FUNC_GET_INFO(
    IN_NO IN emp.emp_no%TYPE
) RETURN VARCHAR
IS
    p_NAME emp.emp_name%TYPE;

BEGIN
    SELECT emp_name INTO p_NAME FROM emp WHERE emp_no = IN_NO;
    RETURN p_NAME;

EXCEPTION
  WHEN OTHERS THEN
    RETURN 'Error';
END;
/


ストアドファンクションの実行

以下は SQL*Plus でストアドファンクションをSELECT文で実行するサンプルです。

SQL> SET SERVEROUTPUT ON;
SQL> SELECT FUNC_GET_INFO('001') AS name FROM DUAL;

name
-------------------------------
おかじい
SQL> SET SERVEROUTPUT ON;
SQL> SELECT FUNC_GET_INFO('001') AS name FROM DUAL;

name
-------------------------------
おかじい


ストアドファンクションの削除

DROP FUNCTION文

ストアドファンクションの削除は、DROP FUNCTION文を使用します。

構文

DROP FUNCTION {ストアドファンクション名};


以上、Oracleのストアドファンクションについて解説しました。