ファンクションを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;
コメント