sql >> Database >  >> RDS >> Oracle

Foutmelding krijgen bij het aanroepen van een functie in SQL-query in een pakket zonder de functie in pakketspecificatie te declareren

Heeft helemaal niets te maken met voorwaartse aangifte.

Dit gaat over het feit dat u een SQL-query gebruikt om de functie aan te roepen . Het lijkt erop dat wanneer je een instructie gebruikt om een ​​functie aan te roepen, je niet langer binnen het bereik van het PL/SQL-pakket valt, dus je kunt alleen openbaar beschikbare functies aanroepen.

Wat betreft het waarom , ik kan alleen maar gissen, dus neem het niet als vanzelfsprekend aan, maar PL/SQL en SQL hebben verschillende engines . Dus, wanneer je een sql-query uitvoert, zelfs binnen je pl/sql-pakket, ga je naar het niveau van SQL waar het opnieuw de rechten controleert volgens de SQL-engine. Het heeft dus geen idee dat het wordt uitgevoerd vanuit een PL/SQL-pakket en u zou de privéfunctie moeten kunnen aanroepen.

Ik denk dat het verschil van engines gemakkelijk kan worden gecontroleerd, probeer een varchar2 van 32000 te gebruiken, het zal werken binnen je pl/sql-functie. Als u nu uw pl/sql-functie aanroept en een varchar2(32000) retourneert , het zal mislukken. Dit is een probleem dat ik tegenkwam, maar ik heb geen database om je een fragment te geven.



  1. Waarom wordt in MySQL deze IF false geretourneerd?

  2. Controleer of rij bestaat

  3. Wachten tot een ingediende taak is voltooid in Oracle PL/SQL?

  4. Hoe u het datumformaat van uw Oracle-sessie kunt controleren