あなたが抱えている問題は(正しい名前のプロシージャ/関数を正しい方法で呼び出していると仮定して)、まだ宣言されていない関数の呼び出しを呼び出そうとしていることです。関数をプライベートにしておきたい場合、これを回避する方法は2つあります。
- ADD_STUDENT関数を呼び出すプロシージャ/関数の前にADD_STUDENT関数を宣言します。
- 前方宣言 を使用します 呼び出される前に関数を宣言します。
したがって、オプション1の場合、サンプルコードは次のようになります。
PACKAGE BODY SCHOOL AS
FUNCTION ADD_STUDENT(...)
...
END ADD_STUDENT;
PROCEDURE ADD_PEOPLE(...)
...
some_var := ADD_STUDENT();
END ADD_PEOPLE;
END SCHOOL;
/
オプション2の場合、コードは次のようになります。
PACKAGE BODY SCHOOL AS
-- forward declared function
FUNCTION ADD_STUDENT(...);
PROCEDURE ADD_PEOPLE(...)
...
some_var := ADD_STUDENT();
END ADD_PEOPLE;
FUNCTION ADD_STUDENT(...)
...
END ADD_STUDENT;
END SCHOOL;
/
個人的には、オプション1を好みます。これは、パッケージ本体を乱雑にするものが少ないことを意味しますが、相互に参照する2つのモジュールがある場合は、オプション2が必要になる場合があります。