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 :

[ORACLE 10G] Create user if exist


Sujet :

Oracle

  1. #1
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Par défaut [ORACLE 10G] Create user if exist
    Bonjour,

    J'ai recherché sur le net mais je ne trouve aucune information là dessus.

    Est-ce possible, tout comme pour la création d'une table, de créer un utilisateur seulement si celui-ci n'existe pas ?

    Mon application permet la création d'utilisateur et effectuent d'autres actions par la même occasion, j'aimerais que le programme continue même si la première commande (create user) ne peut aboutir.

    J'aimerais donc pouvoir faire une truc du style "create user if exist .."

    Merci d'avance !

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Par défaut
    Tu peux tester l'existence d'un user au préalable dans la vue DBA_USERS, ça donne ça par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT COUNT(*) INTO NB FROM dba_users WHERE username = 'TOTO';
    IF NB = 0 THEN
         -- Création du user
    END IF;

  3. #3
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par dgi77 Voir le message
    Tu peux tester l'existence d'un user au préalable dans la vue DBA_USERS, ça donne ça par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT COUNT(*) INTO NB FROM dba_users WHERE username = 'TOTO';
    IF NB = 0 THEN
         -- Création du user
    END IF;
    Salut dgi77,
    Utiliser select count(*) etc. pour ce type de problème est une mauvaise solution : il faut lire toujours la table pour compter les enregistrements qui corresponde au filtre. Souvent un simple test d’existence suffit de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Select null
      Into l_var
      from dual
     Where exists (Select Null
                     From ma_table
                    Where ...
                   )
    Et parfois ni ce test n’est nécessaire il suffit de gérer simplement les exceptions…

  4. #4
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Salut dgi77,
    Utiliser select count(*) etc. pour ce type de problème est une mauvaise solution : il faut lire toujours la table pour compter les enregistrements qui corresponde au filtre. Souvent un simple test d’existence suffit de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Select null
      Into l_var
      from dual
     Where exists (Select Null
                     From ma_table
                    Where ...
                   )
    Et parfois ni ce test n’est nécessaire il suffit de gérer simplement les exceptions…

    Je ne vois pas vraiment où vous voulez en venir avec votre code.
    Par contre, c'est vrai que je n'exploite pas les exceptions comme il est possible de le faire

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Par défaut
    Citation Envoyé par libuma Voir le message
    Je ne vois pas vraiment où vous voulez en venir avec votre code.
    Par contre, c'est vrai que je n'exploite pas les exceptions comme il est possible de le faire
    Citation Envoyé par mnitu Voir le message
    Salut dgi77,
    Utiliser select count(*) etc. pour ce type de problème est une mauvaise solution : il faut lire toujours la table pour compter les enregistrements qui corresponde au filtre. Souvent un simple test d’existence suffit de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Select null
      Into l_var
      from dual
     Where exists (Select Null
                     From ma_table
                    Where ...
                   )
    Et parfois ni ce test n’est nécessaire il suffit de gérer simplement les exceptions…
    Excusez-moi, je n'ai pas pu venir sur le forum depuis ces 15 derniers jours, mais j'aimerais bien aussi comprendre ce que vous voulez dire mnitu ?
    Est-ce que vous pouvez mieux expliciter et nous fournir une requête concrête ?

  6. #6
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Salut dgi77,
    Quand vous utilisez count vous demandez à Oracle de compter combien des enregistrements existe dans la table qui correspondent aux critères de recherche. Mais, souvent, ce que vous cherchez est toute simplement de savoir si un enregistrement correspondant aux critères de recherche existe ou pas, le nombre des enregistrements précis n’étant pas vraiment intéressant.
    Par conséquence il est plus clair et souvent plus performante d’exprimer cette nuance aussi en termes SQL, au lieu de compter les enregistrements de tester l’existence.
    De plus, la logique : « si l’utilisateur n’existe pas je le crée si non je continue », peut être souvent inversé par : « je crée l’utilisateur et si il existe alors il y aura une exception que je peux interpréter et traiter d’une manière appropriée».

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Par défaut
    Merci, c'est clair.
    J'ai testé votre requête, je comprends le raisonnement.
    Par contre, même si la requête est plus performante, je trouve qu'elle est beaucoup moins explicite (pas facile de comprendre ce que ça fait à la première lecture, vaut mieux avoir bien commenté le code...)
    Merci.

    Citation Envoyé par mnitu Voir le message
    Salut dgi77,
    Quand vous utilisez count vous demandez à Oracle de compter combien des enregistrements existe dans la table qui correspondent aux critères de recherche. Mais, souvent, ce que vous cherchez est toute simplement de savoir si un enregistrement correspondant aux critères de recherche existe ou pas, le nombre des enregistrements précis n’étant pas vraiment intéressant.
    Par conséquence il est plus clair et souvent plus performante d’exprimer cette nuance aussi en termes SQL, au lieu de compter les enregistrements de tester l’existence.
    De plus, la logique : « si l’utilisateur n’existe pas je le crée si non je continue », peut être souvent inversé par : « je crée l’utilisateur et si il existe alors il y aura une exception que je peux interpréter et traiter d’une manière appropriée».

  8. #8
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par dgi77 Voir le message
    ...je trouve qu'elle est beaucoup moins explicite (pas facile de comprendre ce que ça fait à la première lecture, vaut mieux avoir bien commenté le code...)
    ...
    C’est parce que vous n’y est pas encore habitué.
    Pensez vous que le count est plus clair ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT COUNT(*) INTO NB FROM dba_users WHERE username = 'TOTO';
    ...
    On cherche compter combien des utilisateurs existent ayant le nom TOTO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    IF NB = 0 THEN
         -- Création du user
    END IF
    A, en fait on test seulement la non existence .

Discussions similaires

  1. if not exists + create user
    Par killua86 dans le forum Forms
    Réponses: 5
    Dernier message: 19/06/2010, 07h11
  2. Import Dump Oracle 10g / Tablespace et User
    Par kirsito dans le forum Oracle
    Réponses: 5
    Dernier message: 10/08/2009, 12h37
  3. Réponses: 4
    Dernier message: 21/11/2005, 12h04
  4. [ORACLE 10g Linux] Pbm de connexion avec un Client winXP
    Par zarbiwayne dans le forum Administration
    Réponses: 26
    Dernier message: 20/08/2004, 22h37
  5. create user, affectation droits et scripts sql
    Par hirochirak dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 03/02/2004, 10h21

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