ストアドファンクション

ファンクションをOracleのオブジェクトとして定義する。

CREATE OR REPLACE FUNCTION ファンクション名(引数の宣言)
RETURN 戻り値の型 IS
[宣言部]
BEGIN
[実行部]
EXCEPTION
[例外処理]
END ★ファンクション名;

試しに作ってみる

最初はファンクションオブジェクトがない状態

ストアドファンクションを作成するSQLを実行してみると・・・

CREATE OR REPLACE FUNCTION f_getEname (
iEmpno IN EMP.EMPNO%TYPE
) RETURN EMP.ENAME%TYPE IS
--関数の宣言部
wk_ename EMP.ENAME%TYPE; --戻り値
BEGIN
SELECT
ENAME INTO wk_ename
FROM EMP
WHERE
EMPNO = iEmpno;

RETURN wk_ename;

EXCEPTION
WHEN NO_DATA_FOUND THEN
wk_ename := 'NO DATA';
RETURN wk_ename;

WHEN TOO_MANY_ROWS THEN
wk_ename := 'ERROR';
RETURN wk_ename;
END f_getEname;

ファンクションの下に、オブジェクトができあがる。

実行してみる

DECLARE
--宣言部
--変数の宣言
wk_ename EMP.ENAME%TYPE;

--カーソルの宣言
CURSOR q01Selector IS
SELECT
EMPNO
FROM
EMP;

BEGIN
--ファンクションの呼び出し
FOR q01Record IN q01Selector LOOP
wk_ename := f_getEname(q01Record.EMPNO);
DBMS_OUTPUT.PUT_LINE(wk_ename);
END LOOP;

END;

コメント