PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 31/03/2022 01:02:30

Lamethode
Membre

Contrainte CHECK avec condition

Bonjour à tous,
Je souhaite contrôler une saisie de données via une contrainte CHECK respectant des conditions. Celle doit doit débuter par transformer un nombre en charactère .

Ci-dessous le code


CREATE OR REPLACE FUNCTION code_chk (id integer, cat varchar(20), code varchar(20),spletype varchar(20))
RETURNS BOOLEAN AS
$$
New.$1:='A'||New.$1; --Ajout de la lettre A afin de transformer l'ID en charactère--
    SELECT CASE 
    --vérification enfant--
          WHEN ($1 like '%11' OR $1 like '%31' OR $1 like '%51' OR $1 like '%71' OR $1 like '%91')
                  AND (($3='2-FDDUP') AND ($4='Quarter core'))
                  THEN True 
    --vérification parent--
          WHEN ($1 like '%10' OR $1 like '%30' OR $1 like '%50' OR $1 like '%70' OR $1 like '%90')
                  AND (($3='1-Par') AND ($4='Quarter core'))
                THEN True
    --vérification du blanc--
          WHEN ($1 like '%09' OR $1 like '%29' OR $1 like '%49' OR $1 like '%69' OR $1 like '%89')
                  AND (($4='Blank') AND ($3 like 'Blk%'))
                THEN True
    --vérification du CRM--
          WHEN ($1 like '%19' OR $1 like '%39' OR $1 like '%59' OR $1 like '%79' OR $1 like '%99')
                  AND (($4='Standard') AND ($3 like 'Std%'))
                THEN True        
          ELSE False
    END
FROM "X" WHERE ($1>380000 AND $2='QAQC')  --Condition pour effectuerla vérification--
$$ LANGUAGE 'sql';

ALTER TABLE "X"
ADD CONSTRAINT "QC Checking"
CHECK (code_chk("SampleID","SampleCategory","SampleCode","SampleType"));



Voici l'erreur que j'obiens

erreur de syntaxe sur ou près de « $1 »
LINE 6:  New.$1:='A'||New.$1;


Merci de m'aider

Hors ligne

#2 31/03/2022 05:05:09

rjuju
Administrateur

Re : Contrainte CHECK avec condition

Bonjour,


L'erreur n'est pas surprenante car vous n'avez pas de variable New.  De plus $1 est à priori le paramètre id qui est un integer, donc les tests du type $1 LIKE '...' ne sont pas correct non plus.


Avez-vous essayé de réutiliser le code d'un trigger?  Déclarez une variable et utilisez là à la place de New.$1 et $1 et cela devrait corriger le problème.  Les LIKE sont également assez bizarre, mais ne sachant pas que ce "id" contient difficile de savoir si c'est une bonne idée ou pas.

Hors ligne

Pied de page des forums