【PL/SQL】ローカル関数

2020年7月27日

コーディングしていると、限られた範囲でしか使用しない関数を作成したい場合や、変数を共通で参照したい場合があります。
わざわざ、パッケージを作成するのもな~って時に、便利なのに「ローカル関数」があります。
どんなものか見て行きましょう。

DECLARE
    VAL PLS_INTEGER;
    RET PLS_INTEGER;
 
    --引数の値をVALに代入
    PROCEDURE AAA(IN_ATAI IN PLS_INTEGER) IS
    BEGIN
        VAL := IN_ATAI;
    END AAA;
 
    --VALをインクリメントしリターン
    FUNCTION BBB RETURN NUMBER IS
    BEGIN
        VAL := VAL + 1;
        RETURN(VAL);
    END BBB;
 
    --ここに変数は宣言できない
BEGIN
    AAA(5);
 
    RET := BBB();
 
    DBMS_OUTPUT.PUT_LINE(TO_CHAR(RET));
END;

上記のソースだと、
DECLARE ~ BEGIN の間に、変数と、「AAA」プロシージャと、「BBB」ファンクションが宣言されています。
この位置に宣言された関数が「ローカル関数」です。
ローカル関数はお手軽に宣言でき、関数の上に宣言されている変数を参照できます。
「AAA」と「BBB」の関数で変数「VAL」が参照できているのを確認できると思います。
関数に渡す引数が多い場合や、引数の値が大きい(配列や構造体)時のパフォーマンス改善に役立つと思います。
※変数を共通で参照するのは便利ですが、コードの可読性も考慮する様にしましょう。
※PL/SQLの引数は通常、値渡し(コピー)なので、呼び出し時に変数で使用するメモリが2倍になります。
値が大きい場合、値のコピーが負荷になる場合があります。

【PL/SQL】メニュー

サイトマップ

2020年7月27日Oracle,PL/SQL,データベース,プログラム

Posted by こっぷ