Oracle
 sql >> база данни >  >> RDS >> Oracle

Извикване на частна функция в тялото на пакета

Проблемът, който имате (ако приемем, че извиквате правилно наречената процедура/функция по правилния начин) е, че се опитвате да извикате извикване на функция, която все още не е декларирана. Има два начина за това, ако приемем, че искате да запазите функцията частна:

  1. Декларирайте функцията ADD_STUDENT преди всякакви процедури/функции, които я извикват.
  2. Използвайте предаваща декларация за деклариране на функцията, преди да бъде извикана.

И така, за опция 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 може да е необходим, ако имате два модула, които се препращат един към друг.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създам таблица с ограничения, докато изтеглям данни от друга таблица

  2. Zeppelin Oracle SQL заявката се изпълнява по-рано

  3. Oracle кумулативен брой с помощта на SYS_CONNECT_BY_PATH

  4. java.sql.SQLException:невалидни аргументи в повикването

  5. Как да използвам CREATE OR REPLACE?