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

Langage SQL Discussion :

Vérification de la présence d'une ou plusieurs colonnes dans une table


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 172
    Points : 74
    Points
    74
    Par défaut Vérification de la présence d'une ou plusieurs colonnes dans une table
    Bonjour,

    Je voudrais savoir si il est possible de mettre en place une requête permettant de vérifier qu'une table contient bien certains champs (exemple: table "contact" contient bien les champs "nom" et "prénom").
    Etant donnée qu'il s'agit ici d'une table contenant une multitude de champs, un "DESC matable" n'est pas pratique car necessite de devoir parcourir toute la table pour trouver les champs.

    Merci de vos aides.

  2. #2
    Membre confirmé
    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
    Points : 639
    Points
    639
    Par défaut
    Quel SGBD ?
    Sur Oracle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select * from user_tab_columns
    where table_name = 'MATABLE'
    and column_name = 'NOM'
    Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !

  3. #3
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 172
    Points : 74
    Points
    74
    Par défaut
    Oui sur Oracle.

    Qu'est ce que ce que tu entends par "user_tab_columns"?

  4. #4
    Membre confirmé
    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
    Points : 639
    Points
    639
    Par défaut
    C'est le nom d'une vue du dictionnaire de données Oracle, qui contient la liste de toutes les tables et colonnes de ton schéma.
    Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !

  5. #5
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 172
    Points : 74
    Points
    74
    Par défaut
    c'est à dire?

  6. #6
    Membre confirmé
    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
    Points : 639
    Points
    639
    Par défaut
    Exécute la requête en remplaçant MATABLE par une vraie table et NOM par une vraie colonne (en majuscules), et tu comprendras.

    Ou tape desc user_tab_columns (sous TOAD, ce sera plus lisible, consulte l'onglet Data).
    Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !

  7. #7
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 172
    Points : 74
    Points
    74
    Par défaut
    J'ai lancé la requête sous TOAD et il me met "COLUMN_NAME:invalid identifier"

  8. #8
    Membre confirmé
    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
    Points : 639
    Points
    639
    Par défaut
    Peux-tu me montrer la requête exacte que tu as lancée ?
    Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !

  9. #9
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 172
    Points : 74
    Points
    74
    Par défaut
    Je l'ai relancé avec :

    SELECT * FROM user_tab_columns
    WHERE table_name = 'nomdematable'
    AND column_name = 'nomdemacolonne'

    et ça marche

    Par contre, si je veux vérifier la présence de plusieurs colonne avec "OR", il m'affiche le résultat avec d'autres tables (mais ce n'est pas vraiment un probleme).

    Merci pour tout .
    Une derniere petite question (ça va m'éviter de polluer le forum avec un autre sujet): Lors d'un select, si je veux récupérer un nombre précis de résultat au lieu de la table complete, comment je fais? (je crois qu'il y a une histoire de "rownum" ou "rows", mais je n'y arrive pas).

  10. #10
    Membre confirmé
    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
    Points : 639
    Points
    639
    Par défaut
    Citation Envoyé par grumly22 Voir le message
    Par contre, si je veux vérifier la présence de plusieurs colonne avec "OR", il m'affiche le résultat avec d'autres tables (mais ce n'est pas vraiment un probleme).
    Effectivement, 2 tables peuvent avoir une colonne du même nom, il faut donc recombiner le nom de la table avec chaque colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT * FROM user_tab_columns
    WHERE ( table_name = 'nomdematable'
    AND column_name = 'nomdemacolonne_1' )
    OR ( table_name = 'nomdematable'
    AND column_name = 'nomdemacolonne_2' )
    OR ( table_name = 'nomdematable'
    AND column_name = 'nomdemacolonne_3' )
    ...
    Citation Envoyé par grumly22 Voir le message
    Une derniere petite question (ça va m'éviter de polluer le forum avec un autre sujet): Lors d'un select, si je veux récupérer un nombre précis de résultat au lieu de la table complete, comment je fais? (je crois qu'il y a une histoire de "rownum" ou "rows", mais je n'y arrive pas).
    Moi, je fais un COUNT(*) que je balance dans une variable de travail, ensuite, je teste si la variable est > 0 ou non :
    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
     
    DECLARE
    nb_col NUMBER;
    BEGIN
    SELECT COUNT(*) INTO nb_col FROM user_tab_columns
    WHERE ( table_name = 'nomdematable'
    AND column_name = 'nomdemacolonne_1' )
    OR ( table_name = 'nomdematable'
    AND column_name = 'nomdemacolonne_2' )
    OR ( table_name = 'nomdematable'
    AND column_name = 'nomdemacolonne_3' );
    IF nb_col > 0 THEN
    ...
    ELSE
    ...
    END IF;
    END;
    /
    Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/03/2014, 23h31
  2. Réponses: 1
    Dernier message: 26/12/2010, 21h20
  3. Afficher plusieurs colonnes dans une ListBox
    Par codial dans le forum Bases de données
    Réponses: 11
    Dernier message: 23/01/2007, 12h48
  4. Réponses: 5
    Dernier message: 27/12/2006, 16h56
  5. [VB]Rajout d'une ou plusieurs frame dans une frame
    Par ept35 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 15/02/2006, 11h41

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