J'écris une procédure stockée pour copier des données de la table d'un utilisateur vers un autre schéma. Au fond, il est une série d'instructions SELECT .. INSERT telles que celle-ci:Accès à la table d'un autre utilisateur dans une procédure stockée Oracle
INSERT INTO GESCHAEFTE
SELECT *
FROM TURAT03.GESCHAEFTE
WHERE kong_nr = 1234;
Cela fonctionne très bien quand issueing de sqlplus (ou TOAD pour moi ;-)) donc je sais que j'ai des privilèges suffisants, mais quand cela fait partie de la procédure stockée comme ceci:
CREATE OR REPLACE FUNCTION COPY_KONG
(pKongNr IN NUMBER)
RETURN NUMBER
AUTHID CURRENT_USER
IS
BEGIN
INSERT INTO GESCHAEFTE
SELECT *
FROM TURAT03.GESCHAEFTE
WHERE kong_nr = pKongNr;
END;
Je reçois une erreur Oracle:
[Error] ORA-00942 (11: 22): PL/SQL: ORA-00942: table or view does not exist
comme vous pouvez le voir, je l'ai déjà inséré un AUTHID
, mais en vain.
Que puis-je faire d'autre? Je suis à peu près à la fin de mes idées ici.
Merci Vincent, réponse rapide! J'ai été en mesure d'accorder directement le select à mon utilisateur et cela fonctionne maintenant. – Thorsten
C'est un comportement très étrange, quelqu'un at-il une référence quant à pourquoi c'est comme ça. – Reimius
@reimius: Nous ne pouvons que deviner le "pourquoi" car la documentation ne mentionne généralement pas la raison d'une implémentation particulière. Peut-être qu'Oracle choisira de ne pas maintenir un lien de dépendance entre les procédures et les rôles, car cela pourrait entraîner une décompilation massive affectant de nombreux schémas lorsqu'un rôle est modifié. –