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

Oracle Discussion :

[9i] Disponibilité d'une vue catalogue (DBA_USERS) dans le code (intégré FAQ 150 QR


Sujet :

Oracle

  1. #1
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut [9i] Disponibilité d'une vue catalogue (DBA_USERS) dans le code (intégré FAQ 150 QR
    Bonjour,

    Dans l'optique de gérer une création automatique d'un utilisateur Oracle via une procédure stockée, je suis tombé sur un OS : la vue DBA_USERS n'est pas accessible selon le moyen par lequel on tente d'y accéder ...

    Je m'explique, je travaille avec un USER ayant les droits DBA. Les 2 premiers bouts de codes ci-desous fonctionnent :

    1) SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SQL> SELECT DEFAULT_TABLESPACE 
      2    FROM DBA_USERS
      3   WHERE USERNAME = 'TEST';
     
    DEFAULT_TABLESPACE
    ------------------------------
    TBLTEST
    2) Bloc PL anonyme :
    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
    SQL> SET SERVEROUTPUT ON SIZE 1000000;
    SQL> 
    SQL> DECLARE
      2     nomTbsp VARCHAR2(64);
      3  BEGIN
      4     SELECT DEFAULT_TABLESPACE INTO NomTbsp 
      5       FROM DBA_USERS
      6      WHERE USERNAME = 'TEST';
      7   
      8     Dbms_Output.Put_Line ('Nom = ' || nomTbsp);
      9  END;
     10  /
    Nom = TBLTEST
     
    Procédure PL/SQL terminée avec succès.
    Par contre, impossible de créer une fonction stockée avec un appel à cette vue :

    3) Fonction PL :
    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
    18
    19
    20
    21
    22
    23
    24
    SQL> CREATE OR REPLACE FUNCTION NomTableSpace 
      2     (NomUser VARCHAR2)
      3  RETURN VARCHAR2 IS
      4     NomTbsp VARCHAR2(64);
      5  BEGIN
      6     SELECT DEFAULT_TABLESPACE INTO NomTbsp 
      7       FROM DBA_USERS
      8      WHERE USERNAME = NomUser;
      9   
     10     Dbms_Output.Put_Line ('Nom = ' || nomTbsp);
     11     
     12     RETURN nomTbsp;
     13  END;
     14  /
     
    Attention : Fonction créée avec erreurs de compilation.
     
    SQL> show Errors;
    Erreurs pour FUNCTION NOMTABLESPACE :
     
    LINE/COL ERROR
    -------- ----------------------------------------------
    6/4      PL/SQL: SQL Statement ignored
    7/11     PL/SQL: ORA-00942: Table ou vue inexistante
    Je n'ai rien trouvé qui m'explique cette erreur, qui m'étonne vu les privilèges de mon User. Si quelqu'un pouvait m'expliquer, et accessoirement m'apporter une solution, je lui en serait reconnaissant,

    Merci,

    Xavier
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Il faut probablement avoir le droit de faire un SELECT sur DBA_USERS attribué par un GRANT direct (et non par un rôle) ou créer la procédure avec la clause AUTHID CURRENT_USER.

  3. #3
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    sous as sysdba :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SQL>
    SQL> grant select on dba_users to test ;
     
    Autorisation de privilges (GRANT) accepte.
    sous un compte DBA ;
    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
    SQL> CREATE OR REPLACE FUNCTION NomTableSpace 
      2     (NomUser VARCHAR2)
      3     RETURN VARCHAR2 IS
      4         NomTbsp VARCHAR2(64);
      5      BEGIN
      6         SELECT DEFAULT_TABLESPACE INTO NomTbsp 
      7           FROM DBA_USERS
      8          WHERE USERNAME = NomUser;
      9       
     10        Dbms_Output.Put_Line ('Nom = ' || nomTbsp);
     11              RETURN nomTbsp;
     12     END;
     13  /
     
    Fonction créée.
    Avoir le privilége et non pas via un Rôle

  4. #4
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Great, Thanx
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  5. #5
    Membre averti Avatar de Wurlitzer
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 469
    Points : 408
    Points
    408
    Par défaut
    D'une manière plus générale, dans quel cas faut il avoir des droits directs plutot que par un role ?

    Merci

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/07/2014, 17h09
  2. Inclure une vue partiel MVC dans une Web From
    Par Invité dans le forum ASP.NET MVC
    Réponses: 2
    Dernier message: 15/05/2013, 17h50
  3. Intégrer une vue statique (xml) dans une autre
    Par Jeby57 dans le forum Android
    Réponses: 5
    Dernier message: 08/04/2011, 12h13
  4. appel d'une vue pl/sql dans du code java
    Par coolcoolcool dans le forum Général Java
    Réponses: 5
    Dernier message: 08/09/2010, 13h49
  5. voir comment est alimentée une vue qui est dans dba_objects
    Par meufeu dans le forum Administration
    Réponses: 15
    Dernier message: 06/10/2004, 17h27

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