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.