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 :

Unique constraint pour une ligne


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2007
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 401
    Par défaut Unique constraint pour une ligne
    Salut

    J'ai une table avec une colonne IS_DEFAULT qui peut avoir les valeurs 0 et 1 (j'ai crée une CHECK constraint pour cela).

    Maintenant, je voudrais créer une autre constraint de façon à ce qu'il y est une seule ligne qui puisse avoir la valeur 1 dans cette colonne. Toutes les autres lignes devront avoir 0.

    Comment faire ça?

    merci

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Lisez cet article de Tom Kyte pour un approche correct pour ce type de problème.

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2007
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 401
    Par défaut
    Mon problème n'a pas trop avoir les triggers. Du moins, je voudrais les éviter pour résoudre mon problème.

    Actuellement, dans mon table, j'ai cette constraint:

    ALTER TABLE DOC_TYPE_OUTPUTS add CONSTRAINT check_doc_type_is_default CHECK (is_default IN (0, 1));

    De cette maniere ma colonne is_default ne peut avoir que "0" et "1" comme valeurs.

    Ce que je voudrais c'est avoir genre une autre constraint qui me fasse quelque chose comme ça:
    ALTER TABLE DOC_TYPE_OUTPUTS add CONSTRAINT check_doc_type_is_default2 UNIQUE ( is_default WITH VALUE "1")

    Est-ce possible?

    Citation Envoyé par mnitu Voir le message
    Lisez cet article de Tom Kyte pour un approche correct pour ce type de problème.

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    La réponse est non, ce n'est pas possible simplement.
    La mise en place par trigger est lourde et déconseillée par TomKyte. De plus il peut y avoir un autre problème de cohérence de données (information sur un post de developpez)

    Mieux vaut le gérer par l'appli.

  5. #5
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par pjmorce Voir le message
    Mon problème n'a pas trop avoir les triggers. Du moins, je voudrais les éviter pour résoudre mon problème.
    ...
    Si vous lisez l'article vous trouvez une solution à votre problème dans le paragraphe: Correct Answers

  6. #6
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Il serait peut-être judicieux d'avoir NULL et 1 au lieu de 0 et 1. Alors tu peux déclarer la colonne comme unique.
    Sinon, si tu veux garder 0 et 1, il suffit d'avoir l'index suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create unique index ... on ... ( decode(IS_DEFAULT,1,1,null) )
    Cet index n'aura qu'une entrée, pour le 1.
    Cordialement,
    Franck.

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Ou bien créer l'index sur :
    Ça fait la même chose mais c'est plus court à taper

Discussions similaires

  1. enabled à false pour une ligne d'un Stringgrid
    Par PadawanDuDelphi dans le forum Delphi
    Réponses: 2
    Dernier message: 17/10/2006, 09h55
  2. instruction valable pour une ligne d'une table
    Par Skizo dans le forum Access
    Réponses: 2
    Dernier message: 18/05/2006, 15h51
  3. modification de données pour une ligne
    Par Skizo dans le forum Access
    Réponses: 5
    Dernier message: 12/05/2006, 11h05
  4. [MySQL] Pour une ligne ca marche, mais si plusieurs ligne ca foire
    Par twixster dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 16/02/2006, 12h57
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

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