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 :
Qu'en pensez vous ? Y a t-il une meilleure façon de faire ?
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 );
Partager