sql >> Database >  >> RDS >> Oracle

Aanroepen van de privéfunctie binnen de hoofdtekst van het pakket

Het probleem dat u heeft (ervan uitgaande dat u de correct benoemde procedure/functie op de juiste manier aanroept) is dat u een aanroep probeert aan te roepen naar een functie die nog niet is gedeclareerd. Er zijn twee manieren om dit te omzeilen, ervan uitgaande dat je de functie privé wilt houden:

  1. Declareer de ADD_STUDENT-functie vóór alle procedures/functies die deze aanroepen.
  2. Gebruik forward declaratie om de functie te declareren voordat deze wordt aangeroepen.

Dus voor optie 1 ziet uw voorbeeldcode er als volgt uit:

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

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

En voor optie 2 ziet uw code er als volgt uit:

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

Persoonlijk ben ik voorstander van optie 1, omdat dit betekent dat er minder spullen in de behuizing van het pakket zitten, maar optie 2 kan nodig zijn als je twee modules hebt die naar elkaar verwijzen.



  1. Hoe kunnen indexen worden gecontroleerd of ze bestaan ​​in een Laravel-migratie?

  2. ALTER kolommen uit meerdere tabellen in dezelfde query

  3. MySQL selecteer willekeurige rij met JOIN uit twee tabellen

  4. De tekst-, ntext- en afbeeldingsgegevens> typen kunnen niet worden vergeleken of gesorteerd, behalve bij gebruik van IS NULL of LIKE> operator