Je souhaite mettre une contrainte sur un champ de date de naissance pour l'une de mes tables db. Essentiellement, je veux m'assurer que pat_dob_dt
date d'au moins 16 ans (à compter de la date du jour). J'utilise PostgreSQL 8.4.20 et utilisé pour le guidage here:PostgreSQL Trigger/Fonction pour m'assurer que la date est passée
CREATE OR REPLACE FUNCTION patient_dob_in_past()
RETURNS TRIGGER AS $$
BEGIN
-- check pat_dob_dt is in past --
IF (NEW.pat_dob_dt > current_date - interval '16 years') THEN
RAISE EXCEPTION '% must be 16 years in past', NEW.pat_dob_dt
END IF;
RETURN NEW;
END;
$$ language 'plpgsql';
CREATE OR REPLACE TRIGGER patient_dob_in_past BEFORE UPDATE OR INSERT
ON patients FOR EACH ROW EXECUTE PROCEDURE patient_dob_in_past();
Malheureusement, je suis rencontré l'erreur suivante
ERROR: syntax error at or near "END" at character 14
QUERY: SELECT $1 END IF
CONTEXT: SQL statement in PL/PgSQL function "patient_dob_in_past" near line 4
LINE 1: SELECT $1 END IF
Je ne sais pas où je vais mal depuis que je suis les documents pour psql 8.4
EDIT Problème de fonction du point-virgule. Je reçois aussi une erreur pour mon déclencheur
ERROR: syntax error at or near "TRIGGER" at character 19 LINE 1: CREATE OR REPLACE TRIGGER patient_dob_in_past BEFORE UPDATE ...
erreur me regardait en face. Maintenant, j'ai une erreur avec mon déclencheur. Je n'avais pas considéré une contrainte CHECK. Je suppose que ce serait plus rapide? – moadeep
oui - je suppose qu'il sera à la fois plus rapide et plus net –
Malheureusement, certains de nos anciens enregistrements violent déjà une contrainte. Cela prendrait du temps pour nettoyer la base de données. Probablement plus rapide avec un déclencheur. Une idée de pourquoi mes erreurs de déclenchement? – moadeep