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

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    septembre 2005
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services à domicile

    Informations forums :
    Inscription : septembre 2005
    Messages : 171
    Points : 111
    Points
    111

    Par défaut Conseil concernant la vérification de valeur d'une colonne

    Bonjour,
    Je souhaiterai avoir votre avis / conseil concernant la vérification de valeur d'une colonne.
    J'ai une table public.test avec un champ "numero". Cette table doit pouvoir accepter plusieurs lignes avec 0 comme valeur pour le champ "numero" par contre si le numéro est > 0 celui-ci doit être unique.
    Ici pas possible d'utiliser la contrainte UNIQUE vu que plus de 1 lignes peuvent avoir 0 en valeur.
    J'ai donc écris ce qui suis :
    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
    19
    20
    21
    22
    23
     
    CREATE OR REPLACE FUNCTION public.check_numero(p_numero INTEGER) RETURNS BOOL AS $$
    BEGIN
        IF (SELECT COUNT(*) FROM public.test WHERE numero = p_numero AND numero > 0) < 1 THEN
            RETURN TRUE;
        ELSE
            RETURN FALSE;
        END IF;
    END;
    $$ LANGUAGE plpgsql;
     
     
    CREATE DOMAIN public.d_numero AS INTEGER
        CONSTRAINT d_numero_check CHECK
        (
            public.check_numero(VALUE) = TRUE
        );
     
     
    CREATE TABLE public.test
    (
        numero public.d_numero NOT NULL DEFAULT 0
    );
    Qu'en pensez vous ? Y a t-il une meilleure façon de faire ?

  2. #2
    Expert éminent sénior

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    4 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 4 679
    Points : 11 892
    Points
    11 892
    Billets dans le blog
    1

    Par défaut

    Bonjour,

    Le plus simple serait de remplacer zéro par un marqueur "null" ce qui permet de créer la contrainte unique ("nul" n'étant pas une valeur)

    Et si besoin, vous remplacez le marqueur "null" par zéro au moment de la selection grâce à COALESCE

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    septembre 2005
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services à domicile

    Informations forums :
    Inscription : septembre 2005
    Messages : 171
    Points : 111
    Points
    111

    Par défaut

    Ah oui en effet c'est tout simple...
    Je n'avais pas du tout pensé à mettre à null par défaut.

    Merci bien pour le conseil

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/07/2014, 21h02
  2. Vérification de valeur dans une colonne
    Par Bono_BX dans le forum Développement
    Réponses: 1
    Dernier message: 08/09/2011, 11h43
  3. Comment compter seulement une valeur d'une colonne
    Par kolac dans le forum Langage SQL
    Réponses: 7
    Dernier message: 28/07/2005, 01h40
  4. Somme de valeurs d'une colonne d'un DBGrid
    Par navis84 dans le forum Bases de données
    Réponses: 3
    Dernier message: 05/12/2004, 23h58
  5. intervertir les valeurs dans une colonne d'une table
    Par hammou dans le forum Débuter
    Réponses: 2
    Dernier message: 26/01/2004, 10h15

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