Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wywoływanie funkcji prywatnej w treści pakietu

Problem, który masz (zakładając, że wywołujesz poprawnie nazwaną procedurę/funkcję we właściwy sposób) polega na tym, że próbujesz wywołać funkcję, która nie została jeszcze zadeklarowana. Można to obejść na dwa sposoby, zakładając, że chcesz zachować prywatność funkcji:

  1. Zadeklaruj funkcję ADD_STUDENT przed wszelkimi procedurami/funkcjami, które ją wywołują.
  2. Użyj deklaracji przekazywania aby zadeklarować funkcję przed jej wywołaniem.

Tak więc dla opcji 1 przykładowy kod będzie wyglądał następująco:

PACKAGE BODY SCHOOL AS
    FUNCTION ADD_STUDENT(...)
        ...
    END ADD_STUDENT;

    PROCEDURE ADD_PEOPLE(...)
        ...
        some_var := ADD_STUDENT();
    END ADD_PEOPLE;
END SCHOOL;
/

A dla opcji 2 twój kod wyglądałby tak:

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;
/

Osobiście preferuję opcję 1, ponieważ oznacza ona, że ​​jest mniej rzeczy zaśmiecających ciało pakietu, ale opcja 2 może być konieczna, jeśli masz dwa moduły, które odwołują się do siebie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle Sequence nie generuje liczby ciągłej

  2. Parsowanie komentarzy XML w Oracle

  3. Oracle - usuwanie duplikatów

  4. Podłączanie SQL Server do Oracle

  5. java.sql.SQLException:ORA-01843:niepoprawny błąd miesiąca