From 7f1f24c145622795dec52ee373257df4c3e81a6a Mon Sep 17 00:00:00 2001 From: nboisteault Date: Tue, 19 Dec 2023 15:05:22 +0100 Subject: [PATCH] Quiz sur les triggers --- docs/triggers.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/docs/triggers.md b/docs/triggers.md index f497601..76eb78d 100644 --- a/docs/triggers.md +++ b/docs/triggers.md @@ -217,3 +217,47 @@ NB: Continuer vers [Correction des géométries invalides](./validate_geometries.md) + +## Quiz + +
+ Créer une table avec un champ id de type 'serial' et une géométrie de type polygone en 2154. + Puis créer un trigger s'assurant que les géométries aient au minimum **4** points dessinés. + + + ```sql + -- Table: z_formation.polygone_mini_quatre_points + -- DROP TABLE IF EXISTS z_formation.polygone_mini_quatre_points; + CREATE TABLE IF NOT EXISTS z_formation.polygone_mini_quatre_points + ( + id serial NOT NULL PRIMARY KEY, + geom geometry(Polygon,2154) + ) + + -- FUNCTION: z_formation.contrainte_mini_quatre_points() + -- DROP FUNCTION IF EXISTS z_formation.contrainte_mini_quatre_points(); + CREATE OR REPLACE FUNCTION z_formation.contrainte_mini_quatre_points() + RETURNS trigger AS $limite$ + BEGIN + -- On vérifie que le polygone a au moins 4 points dessinés + -- => soit 5 points en comptant le dernier point qui ferme le polygone ! + IF ST_NPoints(NEW.geom) < 5 + THEN + -- On renvoie une erreur + RAISE EXCEPTION 'Le polygone doit avoir au moins 4 points dessinés'; + END IF; + + RETURN NEW; + END; + $limite$ + LANGUAGE plpgsql; + + -- Trigger: trg_contrainte_mini_quatre_points + -- DROP TRIGGER IF EXISTS trg_contrainte_mini_quatre_points ON z_formation.polygone_mini_quatre_points; + CREATE OR REPLACE TRIGGER trg_contrainte_mini_quatre_points + BEFORE INSERT OR UPDATE + ON z_formation.polygone_mini_quatre_points + FOR EACH ROW + EXECUTE FUNCTION z_formation.contrainte_mini_quatre_points(); + ``` +