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 :

Comparaison des colonnes de deux tables différentes [Débutant(e)]


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club Avatar de Chakalaka
    Inscrit en
    Octobre 2007
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 152
    Points : 66
    Points
    66
    Par défaut Comparaison des colonnes de deux tables différentes
    Bonjour,

    Je voudrais savoir si Oracle fournit un moyen de comparer la structures de deux tables. Je veux juste voir si les 2 tables ont les mêmes colonnes le contenu m’intéresse pas du tout (je ne veux pas comparer les données)

    Sinon y a-t-il une fonction pour faire ce genre de comparaison ? Mes connaissances en programmation Oracle sont limitées

    Merci pour votre aide

    PS: J'utilise PL/SQL developper 7.0

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Regarde all_tab_colums

    C'est quoi 2 tables qui ont les mêmes colonnes ?
    C'est même nom de colonne + même data_type ? Ou juste même nom ou juste même data_type ?

  3. #3
    Membre du Club Avatar de Chakalaka
    Inscrit en
    Octobre 2007
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 152
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Regarde all_tab_colums

    C'est quoi 2 tables qui ont les mêmes colonnes ?
    C'est même nom de colonne + même data_type ? Ou juste même nom ou juste même data_type ?

    En effet, j'ai 2 tables :
    Table A
    Table B qui est l'archive de la table A

    Donc les 2 ont un nom différent mais devraient avoir les mêmes colonnes

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select column_name, data_type, data_length
      from all_tab_columns
     where table_name = 'TABLEA'
     minus
    select column_name, data_type, data_length
      from all_tab_columns
     where table_name = 'TABLEB'
    Après il suffit de récupérer les colonnes nécessaires, comme NULLABLE, de all_tab_columns en fonction du besoin.

  5. #5
    Expert confirmé
    Avatar de doc malkovich
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2008
    Messages
    1 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 884
    Points : 4 285
    Points
    4 285
    Billets dans le blog
    1
    Par défaut
    TOAD a une fonction de compare schema très pratique ...
    Mais à ma connaissance PL/SQL developper non

  6. #6
    Membre du Club Avatar de Chakalaka
    Inscrit en
    Octobre 2007
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 152
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select column_name, data_type, data_length
      from all_tab_columns
     where table_name = 'TABLEA'
     minus
    select column_name, data_type, data_length
      from all_tab_columns
     where table_name = 'TABLEB'
    Après il suffit de récupérer les colonnes nécessaires, comme NULLABLE, de all_tab_columns en fonction du besoin.
    Merci pour le script
    J'essaye de rouler ça et j'ai le résulat suivant

    Pourquoi c'est vide de même ? je dois changer un settings quelque part ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    soit les tables sont identiques, soit la table A n'existe pas...

  8. #8
    Membre du Club Avatar de Chakalaka
    Inscrit en
    Octobre 2007
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 152
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    soit les tables sont identiques, soit la table A n'existe pas...
    Les tables ne sont pas identiques j'ai fait une vérification manuelle à l'ancienne et je trouve que A a une colonne de plus que B (Bon je vais revérifier en cas ou ...)
    Les deux tables existent je fais un select * et j'ai des données dans chacune

    J'ai interchangé le nom des deux tables (j'ai mis B avant A) sans succès

    Merci pour votre aide

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Effectivement si B a plus de colonnes que A la requête est insuffisante.
    Il faut faire le MINUS des 2 côtés
    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
      with aminusb as (
    SELECT column_name, data_type, data_length
      FROM all_tab_columns
     WHERE table_name = 'TABLEA'
     minus
    SELECT column_name, data_type, data_length
      FROM all_tab_columns
     WHERE table_name = 'TABLEB'
    ),
           bminusa as (
    SELECT column_name, data_type, data_length
      FROM all_tab_columns
     WHERE table_name = 'TABLEB'
     minus
    SELECT column_name, data_type, data_length
      FROM all_tab_columns
     WHERE table_name = 'TABLEA'
    )
    select * from aminusb
     union all
    select * from bminusa
    Sinon tu es sûr de ta vérification manuelle ?

  10. #10
    Invité
    Invité(e)
    Par défaut
    Est-ce que cette simple requête te ramène déjà quelque chose ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT column_name, data_type, data_length
      FROM all_tab_columns
     WHERE table_name = 'TABLEA'
    Je me demande si ce n'est pas plutôt un problème de casse ou de mauvais schéma...

  11. #11
    Membre du Club Avatar de Chakalaka
    Inscrit en
    Octobre 2007
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 152
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Effectivement si B a plus de colonnes que A la requête est insuffisante.
    Il faut faire le MINUS des 2 côtés
    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
      with aminusb as (
    SELECT column_name, data_type, data_length
      FROM all_tab_columns
     WHERE table_name = 'TABLEA'
     minus
    SELECT column_name, data_type, data_length
      FROM all_tab_columns
     WHERE table_name = 'TABLEB'
    ),
           bminusa as (
    SELECT column_name, data_type, data_length
      FROM all_tab_columns
     WHERE table_name = 'TABLEB'
     minus
    SELECT column_name, data_type, data_length
      FROM all_tab_columns
     WHERE table_name = 'TABLEA'
    )
    select * from aminusb
     union all
    select * from bminusa
    Sinon tu es sûr de ta vérification manuelle ?
    Merci enormément pour ce script je vais le garder

    PS: J'avais une colonne de moins la situation est maintenant corrigée

  12. #12
    Membre du Club Avatar de Chakalaka
    Inscrit en
    Octobre 2007
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 152
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    Est-ce que cette simple requête te ramène déjà quelque chose ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT column_name, data_type, data_length
      FROM all_tab_columns
     WHERE table_name = 'TABLEA'
    Je me demande si ce n'est pas plutôt un problème de casse ou de mauvais schéma...
    Merci je garde ça aussi

    Merci guys pour votre aide j'apprécie

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

Discussions similaires

  1. retourner des colonnes de deux tables
    Par 300hero dans le forum Requêtes
    Réponses: 5
    Dernier message: 28/10/2010, 15h03
  2. Réponses: 2
    Dernier message: 30/04/2009, 13h46
  3. Réponses: 2
    Dernier message: 10/04/2009, 15h34
  4. Comparaison entre deux champs de deux tables différentes
    Par liam81150 dans le forum Requêtes
    Réponses: 1
    Dernier message: 26/09/2005, 21h53
  5. Réponses: 3
    Dernier message: 11/07/2005, 16h20

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