Très probablement, le problème est que la subvention a été effectuée via un rôle. Les privilèges accordés à un utilisateur ne sont pas disponibles dans la procédure stockée des droits d'un définisseur (valeur par défaut).
Dans SQL Developer, il est relativement facile de vérifier qu'il s'agit bien du problème. Si vous exécutez la commande
SET ROLE none
puis exécutez l'instruction SELECT, je m'attendrais à ce que vous obteniez la même erreur ORA-00942.
En supposant que ce soit le cas, la solution serait généralement de demander aux propriétaires des tables du schéma YYY de vous accorder l'accès aux tables directement plutôt que d'accorder l'accès via un rôle. À défaut, vous pouvez définir votre procédure stockée comme une procédure stockée de droits d'invocateur en ajoutant AUTHID CURRENT_USER à la déclaration. Cela signifierait que l'appelant de la procédure aurait besoin d'avoir accès aux objets sous-jacents, mais cela permettrait à vos procédures d'utiliser les privilèges accordés via un rôle.
Si vous souhaitez créer une procédure stockée de droits d'invocateur, vous devrez également faire référence au nom de la table à l'aide de SQL dynamique afin de reporter la vérification des privilèges à l'exécution. Vous auriez donc quelque chose comme
CREATE OR REPLACE PROCEDURE PRC_SOMESP
AUTHID CURRENT_USER
AS
l_cnt pls_integer;
BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM yyy.TableA' INTO l_cnt;
END PRC_SOMESP;
si vous vouliez une procédure stockée de droits d'invocateur qui interrogeait la table TableA dans le schéma XXX.