sql >> Base de Datos >  >> RDS >> Oracle

Obtiene un error al llamar a cualquier función en una consulta SQL en un paquete sin declarar la función en la especificación del paquete

Nada que ver con la declaración de reenvío en absoluto.

Esto se relaciona con el hecho de que está utilizando una consulta SQL para llamar a la función . Parece que cuando usa una declaración para invocar una función, ya no está dentro del alcance del paquete PL/SQL, por lo que solo puede llamar a funciones disponibles públicamente.

En cuanto al porqué , solo puedo adivinar, así que no lo tome por sentado, pero PL/SQL y SQL tienen diferentes motores . Entonces, al hacer una consulta sql, incluso dentro de su paquete pl/sql, va al nivel de SQL donde verificará nuevamente los permisos de acuerdo con el motor SQL. Por lo tanto, no tiene idea de que se ejecuta desde un paquete PL/SQL y debería poder llamar a la función privada.

Creo que la diferencia de motores se puede verificar fácilmente, intente usar un varchar2 de 32000, funcionará dentro de su función pl/sql. Ahora, si llama a su función pl/sql y devuelve un varchar2(32000) , fallará. Este es un problema que encontré, pero no tengo ninguna base de datos para darle un fragmento.