【PL/SQL】ローカル関数
コーディングしていると、限られた範囲でしか使用しない関数を作成したい場合や、変数を共通で参照したい場合があります。
わざわざ、パッケージを作成するのもな~って時に、便利なのに「ローカル関数」があります。
どんなものか見て行きましょう。
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倍になります。
値が大きい場合、値のコピーが負荷になる場合があります。