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 :

Contrainte CHECK Conditionnelle...


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 44
    Par défaut Contrainte CHECK Conditionnelle...
    Bonjour à tous

    En fait j'ai une petite question à laquelle je ne trouve pas de réponse sur la toile et donc je fini par me demander si cette fonctionnalité est possible.

    En clair, je voudrais tester la valeur de mes champs lors de l'enregistrement d'une nouvelle ligne dans ma table, en vérifiant la présence de données dans les autres colonnes de ma table pour la même ligne... j'ai pensé à la commande CHECK mais je me demande si elle me le permettra...

    C'est pour la gestion d'un arbre, en gros je stocke les valeurs de 4 niveaux hierarchique, et je voulais empécher l'utilisateur de rentrer une valeur pour une branche fille alors que la branche père est à NULL...

    En gros quatre colonne: Arrière Grand-père(AGP), Grand-père(GP),père,fils
    => Valeur GP <> Null QUE SI Valeur AGP <> Null
    => Valeur père <> Null que si AGP ET GP <> Null etc....

    j'espère avoir était clair !!

    Merci par avance pour votre aide

  2. #2
    Xo
    Xo est déconnecté
    Membre Expert
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Par défaut
    Salut, et bienvenue sur ce forum,

    Quel est le SGBD utilisé SVP ? Pourrait-on avoir la structure de la table en question, ça aiderait également à mieux appréhender le problème.

    De manière globale, une contrainte Check permet de faire des contrôles sur l'enregistrement en cours d'insertion/modification, en se basant sur les différentes valeurs prises par les champs de cet enregistrement, mais en aucun cas d'aller lire d'autres enregistrements.
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 44
    Par défaut
    Le SGBD en question est Access 2000, La structure de la tabl est simple!

    Table Arbre
    --------------------------------
    ID (COUNTER)(PK) |
    Arrière-Grand-Père (TXT) |
    Grand-Père (TXT) |
    Père (TXT) |
    Fils (TXT) |
    Index (INTEGER) |
    --------------------------------

    Je voudrais que le NOT NULL soit obligatoire pour les noeuds ascendants (le père pas rapport au fils par exemple, ou le Grand-Père par rapport au père et par rapport au fils...) UNIQUEMENT si les noeuds descendants (le fils par rapport au père, au grand-père, et à lAGP...) ne sont pas vide.

    Bref je ne veux pas de fils tout seul, ou de père et de fils tout seul. il me faut obligatoirement la hierarchie COMPLETE jusqu'au niveau souhaité.

    Ex:
    AGP-GP-Null-Null => OK
    AGP-GP-P -Null=> OK

    AGP-Null-P-F => PAS BON
    AGP-Null-P-Null => PAS BON


    Et d'aprés ta description du CHECK... ben ca marche pas
    Donc merci beaucoup pour ton aide.... si tu as une idée pour gérer ce type de problème je suis "aware"

  4. #4
    Xo
    Xo est déconnecté
    Membre Expert
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Par défaut
    Citation Envoyé par Moskito
    En clair, je voudrais tester la valeur de mes champs lors de l'enregistrement d'une nouvelle ligne dans ma table, en vérifiant la présence de données dans les autres colonnes de ma table pour la même ligne... j'ai pensé à la commande CHECK mais je me demande si elle me le permettra...
    Citation Envoyé par Moskito
    Et d'aprés ta description du CHECK... ben ca marche pas
    Si, puisque tu te cantonnes à des contrôles de cohérence sur un seul enregistrement, j'émettais juste des réserves en ne sachant pas trop au début si tu souhaitais faire des contrôles sur d'autres enregistrements ...

    Par contre, il faudra bien que tu listes de manière exhaustive à la main tous les cas de figure à bloquer, afin de coder ta contrainte
    Tu essayes et tu nous dis
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

Discussions similaires

  1. contraintes check
    Par djeman dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 10/01/2009, 18h33
  2. contraint CHECK avec lecture de données sur une autre table ?
    Par mamiberkof dans le forum Langage SQL
    Réponses: 1
    Dernier message: 22/05/2006, 09h14
  3. [SQL Server 2000] Contrainte check
    Par batosai dans le forum Langage SQL
    Réponses: 3
    Dernier message: 24/04/2006, 16h16
  4. Modification d'une contrainte Check
    Par linou dans le forum Oracle
    Réponses: 7
    Dernier message: 03/10/2005, 11h25
  5. [Debutant] Contrainte CHECK
    Par TeQ dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/01/2004, 11h18

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