サブプログラムが呼び出されるとき、それは、スタンドアロンプログラム内のブロックの階層のどこかであるが、呼び出される前に宣言されていなければならない。 言い換えれば、SPLコードを最初から最後までスキャンするとき、サブプログラム宣言は、その呼び出しの前に見つけられなければならない。
しかし、サブプログラムの完全な宣言 (すなわち、サブプログラムのオプションの宣言セクション、必須の実行可能セクション、およびオプションの例外セクション) が、それが呼び出されたコード内のポイントの後にSPLコード内に現れるように、SPLコードを構築する方法がある。
これは、SPLコードの呼び出しの前に前方宣言を挿入することによって達成される。 前方宣言は、サブプロシージャまたはサブ関数名、仮パラメータ、およびサブ関数の場合は戻り値の型の指定です。
オプションの宣言セクション、実行可能セクション、およびオプションの例外セクションからなる完全なサブプログラム仕様は、フォワード宣言と同じ宣言セクションで指定する必要がありますが、フォワード宣言でこのサブプログラムを呼び出す他のサブプログラム宣言の後に表示される場合があります。
次の例は、2つのサブプログラムが互いに呼び出される場合の、フォワード宣言の一般的な使用法を示しています。
DECLARE
関数add_one (
番号でp_add
) RETURN NUMBER;
関数test_max (
番号でp_test)
RETURN NUMBER
IS
BEGIN
IF p_test < 5 THEN
RETURN add_one(p_test);
END IF;
DBMS_OUTPUT.PUT('Final value is ');
リターンp_test;
END;
関数add_one (
p_addで数)
RETURN NUMBER
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('1増加');
RETURN test_max(p_add + 1);
エンド;
開始
DBMS_OUTPUT.PUT_LINE(test_max(3));
エンド;
サブ関数test_maxはサブ関数add_oneを呼び出し、これもサブ関数test_maxを呼び出します。 したがって、サブプログラムの1つには、匿名ブロック宣言セクションの先頭にあるadd_oneに実装されたフォワード宣言が必要です。
次の出力は、匿名ブロックによって生成されます。
1増加
1増やす
最終値は5