Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/11/2011, 22h21   #1
Nouveau Membre du Club
 
Avatar de Chakalaka
 
Inscription : octobre 2007
Messages : 144
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 144
Points : 33
Points : 33
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
Chakalaka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 00h00   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
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 ?
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 04h47   #3
Nouveau Membre du Club
 
Avatar de Chakalaka
 
Inscription : octobre 2007
Messages : 144
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 144
Points : 33
Points : 33
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
Chakalaka est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 16/11/2011, 10h12   #4
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Par exemple :
Code :
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.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 11h34   #5
Modérateur
 
Avatar de doc malkovich
 
Homme
Consultant en Business Intelligence
Inscription : juillet 2008
Messages : 951
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 : 951
Points : 1 470
Points : 1 470
TOAD a une fonction de compare schema très pratique ...
Mais à ma connaissance PL/SQL developper non
__________________
Avez-vous 60 secondes pour répondre aux sondages sur BO ici et ?
doc malkovich est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 19h39   #6
Nouveau Membre du Club
 
Avatar de Chakalaka
 
Inscription : octobre 2007
Messages : 144
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 144
Points : 33
Points : 33
Citation:
Envoyé par skuatamad Voir le message
Par exemple :
Code :
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 ?
Chakalaka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 20h46   #7
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
soit les tables sont identiques, soit la table A n'existe pas...
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 22h05   #8
Nouveau Membre du Club
 
Avatar de Chakalaka
 
Inscription : octobre 2007
Messages : 144
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 144
Points : 33
Points : 33
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
Chakalaka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 00h00   #9
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
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 :
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 ?
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 14h53   #10
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
Est-ce que cette simple requête te ramène déjà quelque chose ?
Code :
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...
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 17h21   #11
Nouveau Membre du Club
 
Avatar de Chakalaka
 
Inscription : octobre 2007
Messages : 144
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 144
Points : 33
Points : 33
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 :
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
Chakalaka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 17h27   #12
Nouveau Membre du Club
 
Avatar de Chakalaka
 
Inscription : octobre 2007
Messages : 144
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 144
Points : 33
Points : 33
Citation:
Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
Est-ce que cette simple requête te ramène déjà quelque chose ?
Code :
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
Chakalaka est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h32.


 
 
 
 
Partenaires

Hébergement Web