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

ORA-00942 :la table ou la vue n'existe pas (fonctionne lorsqu'un sql séparé, mais ne fonctionne pas dans une fonction oracle)

Il y a de fortes chances que les privilèges permettant de sélectionner dans table1 aient été accordés à un rôle et que le rôle vous ait été accordé. Les privilèges accordés à un rôle ne sont pas disponibles pour PL/SQL écrit par un utilisateur, même si l'utilisateur a reçu le rôle.

Vous le voyez souvent pour les utilisateurs auxquels le rôle dba a été accordé sur des objets appartenant à sys. Un utilisateur avec le rôle dba pourra, par exemple, SELECT * from V$SESSION , mais ne pourra pas écrire une fonction qui inclut SELECT * FROM V$SESSION .

Le correctif consiste à accorder des autorisations explicites sur l'objet en question directement à l'utilisateur, par exemple, dans le cas ci-dessus, l'utilisateur SYS doit GRANT SELECT ON V_$SESSION TO MyUser;