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 :

Requete pour comparer tables sur 2 schemas [Débutant(e)]


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Par défaut Requete pour comparer tables sur 2 schemas
    Bonjour a tous,
    voila desole de creer un topic aussi inutile, effacez le des que vous m'avez repondu et que je vous aurai milles fois remercié.
    J'ai lu les tutoriaux avec attention, enfin quand je comprenais et j'ai pas trouvé de reponse sur les requetes multi-shemas....

    Voila, je n'arriva pas faire une requete sur sql+ sur 2 shemas a peu pres identiques sauf qu'un a moins de tables que l'autre, et aussi moins de propriétés dans ces memes tables, ils sont dans la meme base de données, par exemple:

    j'ai la table produit dans le shema test1(la plus complete)produitnomprod, nomcourtprod, nomlongprod....)
    et aussi cette table dans test2(la moins complete)produitnomprod, et pas les deux autres)
    Mon but est juste de pouvoir comparer a partir de la propriété nomprod quels sont les noms de produits qui sont dans une table et pas dans l'autre et inversement(donc peut etre deux requetes necessaires)

    J'ai tapé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT nomprod
    FROM test1.produit, test2.produit
    where test2.nomprod not like ' ' (du a des champs vides de test2 et des espaces pour ces champs vides)
    and test2.nomprod not like '  '
    and test2.nomprod is not null
    and test1.nomprod != test2.nomprod;
    Est ce que vous pourriez corrigez mon sql?, car selon sql+

    ERREUR à la ligne 4 :
    ORA-00904: "test2.nomprod" : identificateur non valide*
    Merci de votre patience et de votre tolerance

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    test2.nomprod : C'est une table non ?
    L'erreur vient de ta clause where Faut mettre des noms de colonnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where test2.nomprod.col1 =

  3. #3
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Par défaut
    Merci pour l'edit, je savais pas comment on faisais, sachant qu'en plus c'est du code que j'ai refais pour le post.

    Desole j'ai meme fait une erreur dans le post de depart
    que je vais editer d'une minute a l'autre.
    nompro correspond au champ et la table sera 'produit'
    test1 et test2 correspondent aux deux shemas

    La hierarchie schema.table.champ doit se faire quand?
    Dans le select?, le from et le where?
    Ou dans quels cas?
    Pouvez vous me donner le corrigé de mon sql?, s'il vous plait, de toute facon ca ne sera pas du copié/collé
    Merci d'avance

  4. #4
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Par défaut
    Voila le code, que j'ai fais en suivant vos indications, et l'erreur est du meme type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Select test1.produit.nomprod
    from test1.produit, test2.produit
    where test1.produit.nomprod != test2.produit.nomprod
    and test2.produit.nomprod is not null 
    and test2.produit.nomprod not like ' '
    and test2.produit.nomprod '  ';
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     ERREUR à la ligne 3 :
    ORA-00904: "test1"."produit"."nomprod" : identificateur non valide
    Merci de votre aide

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Kannuki
    La hierarchie schema.table.champ doit se faire quand?
    A chaque fois que tu vas faire appel à une colonne !!

    quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT col1 FROM MATABLE
    Tu peux aussi l'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT matable.col1 FROM MATABLE
    SELECT m.col1 FROM MATABLE m
    SELECT MonSchema.MATABLE.col1 FROM MonSchema.MATABLE
    SELECT m.col1 FROM MonSchema.MATABLE m

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    ERREUR à la ligne 3 :
    ORA-00904: "test1"."produit"."nomprod" : identificateur non valide
    Essayes de voir les droits :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT test1.produit.* FROM test1.produit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT test2.produit.* FROM test2.produit

  7. #7
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Par défaut
    Merci beaucoup, je vais voir ca dans 10 minutes, c'est la pause café.. 8)

  8. #8
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Mon but est juste de pouvoir comaprer partir de la propriété nomprod quels sont les noms de produits qui sont dans une table et pas dans l'autre et inversement(donc peut etre deux requetes necessaires)
    Pour ça mieux vaut des EXISTS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT t1.nomprod 
    FROM TEST1.produit t1
    WHERE NOT EXISTS (	SELECT 1 
    					FROM TEST2.produit t2
    					WHERE t2.nomprod = t1.nomprod
    				)
    UNION ALL
    SELECT t2.nomprod 
    FROM TEST2.produit t2
    WHERE NOT EXISTS (	SELECT 1 
    					FROM TEST1.produit t1
    					WHERE t1.nomprod = t2.nomprod
    				)

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 98
    Par défaut
    As tu penser à granter ta table pour l'autre schema pour qu'il puisse l'acceder ?

  10. #10
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Par défaut
    McM
    j'ai essayé avec la premiere methode sans succes, et avec le meme message d'erreur. Quand tu parles des droits, c'est bien des privileges de chaque schema??


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT test1.produit.* FROM test1.produit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT test2.produit.* FROM test2.produit
    et a deuxieme ne veux pas s'executer
    je ne comprends pas a quoi sert le
    Learn:
    J'ai mis dans l'onglet objet a partir de la connection system la fonction select dans test1 pour chaque table de test2. Est ce que ca suffit?

    Merci d'eclairer ma lanterne et surtout merci tout court.

  11. #11
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Par défaut
    Bonjour, une nouvelle journée de scripts sql buggés s'annonce encore...
    Je me permet de faire un petit up, car je ne peux rien faire pendant ce temps la.
    Heuresement que c'est un stage, sinon j'aurai eu moins de tolerance de la part de mon responsable.

    Merci

  12. #12
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Pour les droits d'accès tu as le cours http://oracle.developpez.com/guide/a...ion/adminrole/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GRANT SELECT ON test1.produit TO ton_user;
    GRANT SELECT ON test2.produit TO ton_user;
    Ton user pourra alors lire les données de ces 2 tables.

    Pour le SELECT 1, c'est du Sql normal pour du NOT EXISTS

  13. #13
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Par défaut
    1)J'avais deja ceci comme privileges:
    J'ai mis dans l'onglet objet a partir de la connection system la fonction select dans test1 pour chaque table de test2.
    Ce matin j'ai rajouté reference a test1 pour chaque table de test2, donc j'ai select et reference pour chaque table de test2 dans test1.
    Je viens de le faire aussi pour test2 dans le sens inverse.
    Je l'ai fait par l'interface de OEM, et pour valider ces droits l'onglet 'option d'autorisation' doit etre croix roige ou signe vert?.(je sais la question est bete...)



    2)Donc j'ai simplifier le script sous cette forme:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select test1.produit.nomprod 
    from test1.produit, test2.produit 
    where test1.produit.nomprod != test2.produit.nomprod ;
    Et maintenant, le message d'erreur est celui, , or je ne comprends pas du tout sa signification


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ERREUR à la ligne 3 :
    ORA-00932: types de données incohérents : - attendu ; CLOB obtenu
    Merci MCM pour ton aide précieuse

  14. #14
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Kannuki
    1) Je l'ai fait par l'interface de OEM, et pour valider ces droits l'onglet 'option d'autorisation' doit etre croix roige ou signe vert?.(je sais la question est bete...)
    Désolé, je ne connais pas OEM.. Quelqu'un d'autre ?

    Citation Envoyé par Kannuki
    2)Donc j'ai simplifier le script sous cette forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select test1.produit.nomprod 
    from test1.produit, test2.produit 
    where test1.produit.nomprod != test2.produit.nomprod ;
    Ah non.. elle va pas bien cette requete, tu as une jointure entre les 2 tables donc pour chaque ligne de ta 1ère, tu vas avoir toutes les lignes de la 2ème pour lesquels le nomproduit sera différent.
    PS : Et fais pas comme je l'ai vu dans ma boite : J'ai des doublons, je mets un DISTINCT..
    Utilises ma requete avec l'UNION ALL.

  15. #15
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Par défaut
    OEM correspond à Oracle Enterprise Manager
    Je vais ressayer ta requete union avec les nouveaux droits.
    Vivement que mon tuteur me donne une clé TOAD, car ca a l'air vraiment bien comme logiciel.
    Bien mieux, que SQL+, sans clique droit....

    J'ai rééssayé ta requete avec 'UNION ALL' en remplacant les test1... par les bon noms, mais j'ai l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ERREUR à la ligne 5 :
    ORA-00932: types de données incohérents : - attendu ; CLOB obtenu
    Le code refusait de s'executer car il y avait pas de ';'...(j'aurais pu y penser je sais)
    Merci MCM, dommage que je t'entendes pas...(je sais c'est un peu lourd )

  16. #16
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Kannuki
    OEM correspond à Oracle Enterprise Manager
    Je vais ressayer ta requete union avec les nouveaux droits.
    Vivement que mon tuteur me donne une clé TOAD, car ca a l'air vraiment bien comme logiciel.
    Bien mieux, que SQL+, sans clique droit....
    Pour OEM, je sais ... pfff.. mais on ne l'utilise pas où je bosse
    Pour TOAD, c'est vraiment LE logiciel pour le développement sous ORACLE... mais attention aux conneries que tu peux faire, un clic et ça part vite.

  17. #17
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Donne la requete finale.

  18. #18
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Par défaut
    La requete finale avec le point virgule que j'avais oublié, c'est la meme que la tienne...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT t1.nomprod 
    FROM TEST1.produit t1 
    WHERE NOT EXISTS (   SELECT 1 
                   FROM TEST2.produit t2 
                   WHERE t2.nomprod = t1.nomprod 
                ) 
    UNION ALL 
    SELECT t2.nomprod 
    FROM TEST2.produit t2 
    WHERE NOT EXISTS (   SELECT 1 
                   FROM TEST1.produit t1 
                   WHERE t1.nomprod = t2.nomprod 
                );
    Et l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ERREUR à la ligne 5 :
    ORA-00932: types de données incohérents : - attendu ; CLOB obtenu

  19. #19
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    nomprod est un CLOB ?

  20. #20
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Par défaut
    Je ne connais pas la signification de CLOB(je recherche sur google), je suis tout nouveau sur oracle et je ne connais que le sql theorique de 92 voire 86(he oui les professeurs de bts ils sont assez périmés...)

    Autre chose, a la base ce sont deux bases access et test2 est un tableau excel que j'ai transformé en access par importation apres plusieurs subdivisions pour qu'il ai a peu pres la meme structure que test1. J'ai migré les deux bases access avec Oracle Migration Worbench.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Requete pour 3 tables
    Par mihaispr dans le forum Développement
    Réponses: 2
    Dernier message: 20/10/2009, 09h55
  2. Requete pour importation table Excel vers SQL
    Par Cakyas dans le forum Développement
    Réponses: 8
    Dernier message: 03/07/2008, 15h59
  3. Requete pour comparer deux listes
    Par Jean-Christoph dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/04/2008, 13h29
  4. Requete d'une table sur une meme ligne
    Par DoomTheFlame dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/04/2008, 16h37
  5. Réponses: 3
    Dernier message: 23/01/2008, 15h05

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