sql >> Database teknologi >  >> RDS >> Oracle

Får fejl ved at kalde en funktion i SQL-forespørgsel i en pakke uden at erklære funktion i pakkespecifikationen

Intet at gøre med fremadrettet erklæring overhovedet.

Dette omhandler det faktum, at du bruger en SQL-forespørgsel til at kalde funktionen . Det ser ud til, at når du bruger en sætning til at påkalde en funktion, er du ikke længere inden for rammerne af PL/SQL-pakken, så du kan kun kalde offentligt tilgængelige funktioner.

Med hensyn til hvorfor , jeg kan kun gætte, så tag det ikke som givet, men PL/SQL og SQL har forskellige motorer . Så når du laver en sql-forespørgsel, selv inde i din pl/sql-pakke, går du til SQL-niveauet, hvor den igen tjekker tilladelserne i henhold til SQL-motoren. Så den aner ikke, at den udføres fra en PL/SQL-pakke, og du bør have lov til at kalde den private funktion.

Jeg tror, ​​at forskellen på motorer nemt kan kontrolleres, prøv at bruge en varchar2 på 32000, det vil fungere inden for din pl/sql-funktion. Nu, hvis du kalder din pl/sql-funktion returnerer en varchar2(32000) , vil det mislykkes. Det er et problem, jeg stødte på, men jeg har ikke nogen database til at give dig et uddrag.



  1. Håndtering af udenlandske nøgleundtagelser i PHP

  2. Kan ikke finde hverken kolonne dbo eller den brugerdefinerede funktion eller aggregerede dbo.Splitfn, eller navnet er tvetydigt

  3. Kan ikke åbne og låse privilegietabeller:Tabel 'mysql.user' eksisterer ikke

  4. Sådan opretter du dynamiske pivottabeller i MySQL