Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
j'ai un petit souci pour faire une requête simple sql:
J'ai une table comme ça:
CREATE TABLE lot_marq
(
"Lot_ID" integer NOT NULL
"Couleur_Milieu" character varying(50), -- Couleur de la VIE milieu ("JAUNE","ROUGE","ROSE","VERT","BLEU","ORANGE"),
CONSTRAINT cle_lot PRIMARY KEY ("Lot_ID"),
CONSTRAINT couleur_milieu CHECK ("Couleur_Milieu"::text = ANY (ARRAY['JAUNE'::character varying, 'ROUGE'::character varying, 'ROSE'::character varying]))
)
Quand j'essaie d'insérer une valeur avec une requête comme ça, ça marche
insert into lot_marq values (32,"ROUGE"); --syntaxe 1
insert into lot_marq ("Lot_ID") values (22); --syntaxe 2
Par contre si je fais
insert into lot_marq values (32,NULL); --syntaxe 3
ça ne marche pas. Or en lisant la doc http://www.postgresql.org/docs/8.1/stat … aints.html , et notamment ce paragraphe "It should be noted that a check constraint is satisfied if the check expression evaluates to true or the null value. Since most expressions will evaluate to the null value if any operand is null, they will not prevent null values in the constrained columns. To ensure that a column does not contain null values, the not-null constraint described in the next section can be used." je m'attendais à ce que ça marche. Est-ce qu'il y a quelque chose que je fais mal? Je peux toujours utiliser la syntaxe 2 mais dans mon cas précis ça complique pas mal mon programme...
Merci d'avance
Hilaire
Dernière modification par elfunesto (25/01/2012 11:46:24)
Hors ligne
Une fois corrigées les requêtes, on constate que ça marche très bien. La seule raison pour laquelle la syntaxe 3 est refusée, c'est qu'il y a déjà un Lot_ID à 32.
Marc.
Hors ligne
Bonjour,
Merci pour la réponse mais non, le problème n'est pas là
insert into lot_marq values (42,NULL); --syntaxe 3
ne marche pas plus malheureusement (le 32 n'était qu'à titre d'exemple). je reçois un message d'erreur mentionnant "la nouvelle ligne viole la contrainte de vérification « lot_marq » de la relation « couleur_milieu »"
Hilaire
Hors ligne
Rebonjour,
Autant pour moi, je dois avoir un problème dans ma base car sur une table simplifiée ça marche...
Je vais essayer de voir ça.
Désolé!
Hilaire
Hors ligne
ok problème résolu, l'erreur venait effectivement d'un autre point de ma requête... Désolé du dérangement pour rien...
Hilaire
Hors ligne
Pas de souci
Marc.
Hors ligne
Pages : 1