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

SQL Oracle Discussion :

Différences entre 2 tables [11gR2]


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 131
    Par défaut Différences entre 2 tables
    je travaille sur deux bases (PROD et TEST) reliées par un DBlink. TEST est une copie de PROD .

    sur les 2 j' ai une table "utilisateur" où sont gerés les différents accès aux applications. avec la requête qui suit je voudrais selectionner

    tous les utilisateurs (sur prod) qui ont la ligne "RES" (accès à une application particulière) et ensuite à l'aide de ce resultat prendre les même qui n'auraient pas ce droit sur test.


    Effectuée sur TEST

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    select * from utilisateur where not exists
         (select * from utilisateur@prod where grp like 'RES%');
    cette requête ne me retourne aucune ligne pourtant je trouve bien sur Test des utilisateurs sans la ligne Rest.

    lorsque je fais par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select count(*) from utilisateur where grp like 'REST%'
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select count(*) from utilisateur@prod where grp like 'REST%'
    j' ai une große difference. ce qui veut dire que tous ceux qui ont accès en PROD à cette appplication, n'y ont pas forcément accès en TEST.

    besoin d' aide SVP

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    Il manque une jointure dans votre requête NOT EXISTS
    Vu qu'il n'y a aucun lien entre vos deux requêtes, dès lors où un utilisateur à accès à RES alors la requête ne retournera jamais rien

    Lorsque vous écrivez une clause [NOT] EXISTS, commencez toujours par faire la jointure, puis mettre les clauses de sélection, ça vous évitera des oublis et des frayeurs


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select * 
    from utilisateur U
    where not exists
         (select * 
         from utilisateur@prod
         where U.Util_ID = Util_ID
         and grp like 'RES%'
         );

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 131
    Par défaut
    Merci Scriuiw pour ta réponse.

    celle là aussi avec la Jointure je l' avais déjà essayée sans satisfaction. Le résultat me donne des utilisateurs qui dans les 2 bases n' ont pas de droits d'accès à l'application.

    Car je ne cherche que ceux qui y ont accès en prod et pas en Test. Afin de mettre les 2 tables aux même niveau.

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Si je comprends bien la recherche, c'est les utilisateurs en DEV qui n'ont pas le groupe RES mais qui existe en PROD avec le groupe RES ?
    Plutôt quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select * 
      from utilisateur u
     where u.grp not like 'RES%'
       and exists (select 1
                     from utilisateur@prod p
                    where p.Util_ID = u.Util_ID
                      and p.grp like 'RES%'
                  );

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 131
    Par défaut
    skuatamad bonjour
    celle là aussi ne fonctionne pas car un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    /*test en DEV*/
    select * from utilisateur where grp like 'RES%'
    and nom_util = 'resultat1'
    me montre que cet utilisateur a les droits d' accès à l' application en DEV

    de même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    /*test en PROD*/
    select * from utilisateur@prod where grp like 'RES%'
    and nom_util = 'resultat1'

    cette requête ne fait rien d' autre que me donner ceux qui de toutes les facons ont accès à l' application dans les 2 Environements. En occultant tout simplement les lignes 'RES' dans le résultat.

    De même j' ai déjà essayé la requête avec comme condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     having (grp  not like 'RES%'  )
    . Sans succès

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    C'est quoi le test pour savoir si un utilisateur à l'accès à l'application, les filtres changent à chaque poste ?

    Sinon ma requête fait :
    select les utilisateurs en dev
    QUI n'ont pas accès à l'application en dev
    ET QUI ont accès à l'application en prod

    Mais je ne sais pas si ça répond au besoin.

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 131
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    C'est quoi le test pour savoir si un utilisateur à l'accès à l'application, les filtres changent à chaque poste ?

    pas du tout. Juste une erreur de frappe désolée. et corrigée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /*test en PROD*/
    select * from utilisateur@prod where grp like 'RES%'
    and nom_util = 'resultat1'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /*test en DEV*/
    select * from utilisateur where grp like 'RES%'
    and nom_util = 'resultat1'

    Sinon ma requête fait :
    select les utilisateurs en dev
    QUI n'ont pas accès à l'application en dev
    ET QUI ont accès à l'application en prod

    Mais je ne sais pas si ça répond au besoin.
    justement la requête que tu m' as proposée je l'avais déjaà essayé. et comme je te l' ai dit
    ca me renvoie les utilisateurs qui y ont accès sur les 2 environnments ce qui ne m'aide pas beaucoup

  8. #8
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    Justement, non

    Skuatamad vous a envoyé la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select * 
      from utilisateur u
     where u.grp not like 'RES%'
       and exists (select 1
                     from utilisateur@prod p
                    where p.Util_ID = u.Util_ID
                      and p.grp like 'RES%'
                  );
    Donc les utilisateurs qui ne comportent pas RES... dans grp en environnement de DEV mais qui ont RES... en environnement de PROD
    A mon avis, il nous manque des infos pour savoir ce que vous voulez exactement.
    L'erreur n'est pas dans la requête mais dans les critères de sélection que vous nous donnez

  9. #9
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 131
    Par défaut
    Citation Envoyé par Scriuiw Voir le message
    Justement, non

    Skuatmad vous a envoyé la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select * 
      from utilisateur u
     where u.grp not like 'RES%'
       and exists (select 1
                     from utilisateur@prod p
                    where p.Util_ID = u.Util_ID
                      and p.grp like 'RES%'
                  );
    Donc les utilisateurs qui ne comportent pas RES... dans grp en environnement de DEV mais qui ont RES... en environnement de PROD
    A mon avis, il nous manque des infos pour savoir ce que vous voulez exactement.
    L'erreur n'est pas dans la requête mais dans les critères de sélection que vous nous donnez


    Scriuiw
    il n' ya pas d' erreur dans les critères de sélection. J'ai précisé que c'était de ma par une erreur de frappe qui a été déjà corrigée dans le post précédent.

    comme je l'ai dit cette requête ne me donne pas ce que je recherche car lorsque je fais ces tests

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /*test en DEV*/
    select * from utilisateur where grp like 'RES%'
    and nom_util = 'resultat1'
    -- "résultat 1" étant un utilisateur pris au hasart dans le la liste renvoyée par la requête
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /*test en PROD*/
    select * from utilisateur@prod where grp like 'RES%'
    and nom_util = 'resultat1'
    -- "résultat 1" étant un utilisateur pris au hasart dans le la liste renvoyée par la requête
    ils se trouve que cet utilisateur a accès à l'application dans les 2 environnements

  10. #10
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    L'erreur est peut-être lié à la jointure entre utilisateur u et utilisateur@prod p ?
    Pour l'exemple, j'ai inventé un Util_ID considéré comme la PK de la table utilisateur, mais qu'en est-il en réalité ?

    Je persiste à croire qu'il nous manque des éléments pour concevoir correctement la requête qui convient à votre besoin

  11. #11
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    J'ai l'impression que vous faites votre test d'existence dans le mauvais sens, que donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select * 
      from utilisateur@prod p
     where p.grp like 'RES%'
       and not exists (select null
                         from utilisateur u
                        where u.Util_ID = p.Util_ID
                          and u.grp  like 'RES%');

  12. #12
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 131
    Par défaut MERCI INFINIMENT Waldar!!!!!!!!
    Merci merci beaucoup Waldar.
    C'était exactement ce qui manquait. Je réfléchissais à l'envers.

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

Discussions similaires

  1. Différence entre deux tables
    Par fabricedallara dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 24/05/2012, 14h31
  2. Différence entre deux tables
    Par szoubir dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 24/07/2007, 18h41
  3. Différences entre delete table et delete from table
    Par pegase06 dans le forum Administration
    Réponses: 3
    Dernier message: 16/02/2007, 15h25
  4. faire une différence entre deux tables
    Par geay dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/09/2006, 15h33
  5. [9iR2] Différence entre une table et une table objet ?
    Par mainecoon dans le forum Oracle
    Réponses: 1
    Dernier message: 16/02/2006, 04h28

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