Oracle
 sql >> Base de données >  >> RDS >> Oracle

Obtenir une erreur lors de l'appel d'une fonction dans une requête SQL dans un package sans déclarer la fonction dans la spécification du package

Rien à voir avec la déclaration préalable.

Cela concerne le fait que vous utilisez une requête SQL pour appeler la fonction . Il semble que lorsque vous utilisez une instruction pour appeler une fonction, vous n'êtes plus dans le champ d'application du package PL/SQL, vous ne pouvez donc appeler que des fonctions accessibles au public.

Quant au pourquoi , je ne peux que deviner, alors ne le prenez pas pour acquis, mais PL/SQL et SQL ont des moteurs différents . Ainsi, lorsque vous effectuez une requête sql, même à l'intérieur de votre package pl/sql, vous accédez au niveau de SQL où il vérifiera à nouveau les autorisations en fonction du moteur SQL. Il n'a donc aucune idée qu'il est exécuté à partir d'un package PL/SQL et vous devriez être autorisé à appeler la fonction privée.

Je pense que la différence de moteurs peut être vérifiée facilement, essayez d'utiliser un varchar2 de 32000, cela fonctionnera dans votre fonction pl/sql. Maintenant, si vous appelez votre fonction pl/sql renvoyant un varchar2(32000) , ça va échouer. C'est un problème que j'ai rencontré, mais je n'ai pas de base de données pour vous donner un extrait.