sql >> Databáze >  >> RDS >> Oracle

Volání soukromé funkce v těle balíčku

Problém, který máte (za předpokladu, že voláte správně pojmenovanou proceduru/funkci správným způsobem), je ten, že se pokoušíte vyvolat volání funkce, která ještě nebyla deklarována. Existují dva způsoby, jak to obejít, za předpokladu, že chcete zachovat soukromou funkci:

  1. Deklarujte funkci ADD_STUDENT před všemi procedurami/funkcemi, které ji vyvolávají.
  2. Použijte předběžnou deklaraci deklarovat funkci před jejím vyvoláním.

Takže pro možnost 1 by váš příklad kódu vypadal takto:

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

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

A pro možnost 2 by váš kód vypadal takto:

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

Osobně upřednostňuji možnost 1, protože to znamená, že tělo balíčku zaplňuje méně věcí, ale možnost 2 může být nezbytná, pokud máte dva moduly, které na sebe odkazují.



  1. Pravidla v závorkách PostgreSQL, existuje nějaký souhrnný návod?

  2. Oracle Connect By

  3. pomoc s dotazem nad relační tabulkou

  4. Talend etl oracle error 0 řádek vložit