IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

[EXECUTE IMMEDIATE] : accès aux tables de plusieurs schémas


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut [EXECUTE IMMEDIATE] : accès aux tables de plusieurs schémas
    Bonjour à tous,

    RDBMS 9.2.0.7

    dans le genre bug qui va bien me prendre la tete.
    Soit 2 schémas, SCHEM1, SCHEM2
    SCHEM1 accède aux tables de SCHEM2 sans problèmes (j'ai créé un RULE spécifique avec autorisations de SELECTION et REFERENCES + publics synonymes)

    A ce stade, sous SQL*Plus
    sous SCHEM1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) FROM UneTableDeSchem2
    fonctionne

    en PL/SQL
    avec un bloc anonyme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SQL> DECLARE
      2    FMyResult INTEGER;
      3  BEGIN
      4     EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM UneTableDeSchem2 ' INTO FMyResult;
      5     DBMS_OUTPUT.PUT_LINE(TO_CHAR(FMyResult));
      6  END;
      7  /
    560
    cela fonctionne

    dans un OBJET stocké now
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    CREATE OR REPLACE FUNCTION MyTest2 RETURN INTEGER
    IS
      FMyResult INTEGER;
    BEGIN
       EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM UneTableDeSchem2 ' INTO FMyResult;
       DBMS_OUTPUT.PUT_LINE(TO_CHAR(FMyResult));
       RETURN FMyResult;
    END;
     
    Fonction créée.
     
    SQL> SELECT MyTest2 FROM DUAL;
    SELECT MyTest2 FROM DUAL
           *
    ERREUR à la ligne 1 :
    ORA-00942: Table ou vue inexistante
    ORA-06512: à "DEV.MYTEST2", ligne 5
    j'ai alors tenter de modifier ma simple fonction en préfixant le nom de la table par le nom du user

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    CREATE OR REPLACE FUNCTION MyTest2 RETURN INTEGER
    IS
      FMyResult INTEGER;
    BEGIN
       EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM SCHEM2.UneTableDeSchem2 ' INTO FMyResult;
       DBMS_OUTPUT.PUT_LINE(TO_CHAR(FMyResult));
       RETURN FMyResult;
    END;
    
    Fonction créée.
    
    SQL> SELECT MyTest2 FROM DUAL;
    SELECT MyTest2 FROM DUAL
           *
    ERREUR à la ligne 1 :
    ORA-00942: Table ou vue inexistante
    ORA-06512: à "DEV.MYTEST2", ligne 5
    Conclusion
    Dés que cherche dans un objet stocké avec un EXECUTE IMMEDIATE à faire appel à une table d'un autre schéma je me fais jeter à l'exécution, la compilation passe sans problémes.

    et là je suis confronté à une vrai tuile car je dois à tout prix réussir dans des packages PL/SQL à faire des références à des tables de plusieurs schémas applicatifs.

    une idée ?
    nota : je rappel ce comportement a lieu sur la release 9.2.0.7
    Merci de votre aide

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 136
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par PpPool Voir le message
    Dés que cherche dans un objet stocké avec un EXECUTE IMMEDIATE à faire appel à une table d'un autre schéma je me fais jeter à l'exécution, la compilation passe sans problémes.
    Ca c'est normal, la chaine que tu passes en paramètre du execute immediate n'est pas compilée.... Tu peux mettre une déclaration d'amour à la place d'un select que ça compilera quand même!

    Peut-être une piste mais je ne suis pas sûr. J'avais lu que les droits en PL/SQL étaient différents des droits en SQL direct (et peut-être par extension, les droits en pl/SQL anonyme différents des droits des procédures stockées). En particulier, les droits affectés via des vues ne sont pas pris en compte, il faut les affecter directement aux utilisateurs. Tu peux peut-être déjà jeter un oeil de ce coté là.... sinon des plus qualifiés que moi te répondront :p

  3. #3
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut
    Merci bcq brassouille pour ton aide
    en affectant directement les droits de select sur mes tables à mon user, sans passer par mon role çà fonctionne

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Accès à une même table sur plusieurs schémas
    Par P3dr075 dans le forum PL/SQL
    Réponses: 1
    Dernier message: 04/05/2015, 13h26
  2. Acces aux données sur plusieurs tables
    Par Scoha dans le forum Linq
    Réponses: 1
    Dernier message: 21/05/2010, 11h08
  3. Problème d'accès aux tables d'un schéma
    Par joziel dans le forum Oracle
    Réponses: 8
    Dernier message: 13/07/2007, 18h40
  4. [ODBC] Nux - Accès aux tables liées
    Par Artusamak dans le forum Access
    Réponses: 3
    Dernier message: 04/07/2006, 17h57
  5. Réponses: 3
    Dernier message: 30/05/2006, 20h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo