関数とストアドプロシージャは完全に同じですが、唯一の違いは関数が実行終了後に値を返すことであり、ストアドプロシージャは返しません。
関数の構造
関数の構造は以下の通りです。ストアドプロシージャと比較して、関数は作成時に戻り値の型を宣言する必要があります:
FUNCTION name [ ( parameter_list ) ] RETURN sp_type
{ IS | AS }
[ declarative_part ]
BEGIN -- executable part begins
statement; [ statement; ]...
[ EXCEPTION ]
exception_handler; [ exception_handler; ]... ]
END;
関数の作成
CREATE FUNCTION ステートメントを使用して関数を作成します。構文は以下の通りです:
CREATE OR REPLACE FUNCTION func RETURN INT
IS
BEGIN
RETURN 1;
END;
/
パッケージ内で関数を作成する場合、構文は以下の通りです:
CREATE OR REPLACE PACKAGE pack IS
FUNCTION func RETURN INT;
END;
/
CREATE OR REPLACE PACKAGE BODY pack IS
FUNCTION func RETURN INT
IS
BEGIN
RETURN 1;
END;
END;
/
サブルーチン内で関数を定義する場合、構文は以下の通りです:
DECLARE
FUNCTION func RETURN INT
IS
BEGIN
RETURN 1;
END;
BEGIN
NULL;
END;
/