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 :

Vérification qu'une colonne existe


Sujet :

SQL Oracle

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 51
    Points : 160
    Points
    160
    Par défaut Vérification qu'une colonne existe
    Bonjour,

    J'aurais voulu savoir si une fonction existe afin de vérifier qu'une colonne existe dans une table ou alors une méthode pour le faire ?

    Actuellement j'insère des lignes dans une table à partir d'une autre, le problème étant que la table source peut être modifié au cours du temps et une colonne disparaître ou changer de nom.

    Si une colonne disparaît ou change de nom le programme va donc planter.

    Imaginons cette table au mois M1 dont les noms de colonne change au mois M2, comment palier à l'échec de l'exécution du programme ?

    Nom : Capture.PNG
Affichages : 847
Taille : 2,2 Ko


    Je vous remercie par avance

  2. #2
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Salut,

    Je ne connais pas de fonction SQL qui permette de comparer la structure de la même table entre aujourd'hui et le passé.

    Ce que je ferais (mais c'est un peu lourd) : je crée une table bidon TABLE_PAST qui aura la dernière définition de ta table avec TABLE_NAME VARCHAR2(30), COLUMN_NAME VARCHAR2(30). Je fais un insert dedans des données M1 Contrat, M1 Date_Effet etc etc

    Au jour J, tu utilises la table système DBA_TAB_COLS pour récupérer la liste actuelle des colonnes de ta table M1 et tu fais un minus avec TABLE_PAST pour voir si des différences existent --> si oui, quelqu'un a modifié la table après que tu as renseigné TABLE_PAST.

    Par exemple (ATTENTION : je n'ai pas testé)
    SELECT COLUMN_NAME from DBA_TAB_COLS WHERE TABLE_NAME = 'M1'
    MINUS
    SELECT COLUMN_NAME from TABLE_PAST WHERE TABLE_NAME = 'M1';

    Les changements devraient apparaître.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 51
    Points : 160
    Points
    160
    Par défaut
    Je te remercie j'ai pu créer un message d'erreur au moins lorsque c'était le cas.

  4. #4
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Tiens, en relisant ton premier post je me rends compte que je me suis écarté de ta demande initiale : "J'aurais voulu savoir si une fonction existe afin de vérifier qu'une colonne existe dans une table ou alors une méthode pour le faire ?" et je suis parti sur la détection des modifications non voulues.

    Si tu as le nom de la table, le nom de la colonne, le nom du propriétaire, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) FROM DBA_TAB_COLS WHERE TABLE_NAME = 'my_tab' AND COLUMN_NAME = 'my_colonne' AND OWNER = 'the_owner';
    Si le résultat est 0 -->la colonne n'existe pas.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 51
    Points : 160
    Points
    160
    Par défaut
    J'ai effectivement adapté ton code pour au final faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT COUNT(*)
    (
    SELECT COLUMN_NAME from DBA_TAB_COLS WHERE TABLE_NAME = 'TABLE_PAST'
    MINUS
    SELECT COLUMN_NAME from DBA_TAB_COLS WHERE TABLE_NAME = 'TABLE_NOW '
    );
    Et si mon résultat est différent de 0 cela signifie qu'il manque une colonne ou qu'une colonne a changé de nom.

    Je te remercie encore pour ton aide.

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

Discussions similaires

  1. Vérifier que les numéros d'une colonne existent
    Par safirnet123 dans le forum Excel
    Réponses: 2
    Dernier message: 23/02/2011, 09h19
  2. Savoir si une colonne existe dans une table
    Par Deciprog dans le forum SAS Base
    Réponses: 4
    Dernier message: 26/02/2010, 19h46
  3. [MySQL] Verifier si une colonne existe
    Par zesavantfou dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 28/11/2008, 21h20
  4. Réponses: 2
    Dernier message: 08/11/2007, 10h54
  5. Réponses: 2
    Dernier message: 08/11/2007, 10h54

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