Bonjour,
j'ai besoin de mettre en place un trigger dans une base de données Postgres/postgis. J'ai longuement parcouru le forum en quête d'explication sur la mise en place et l'utilisation du trigger. Je précise je suis débutant !
J'aurai donc besoin d'un coup de main s'il vous plaît.
J'ai une table contenant des descriptifs de bâtiments en plusieurs langues. Elle est mise à jour (en nocturne) quotidiennement. Parfois les traductions n'existent pas. J'ai donc besoin de remplacer un champ vide par un champ contenant la valeur.
Objet : Si "nom_structure_en" est vide alors remplir avec "nom_structure_fr"
Voici où j'en suis pour l'instant au vu de ce que j'ai compris dans les différents posts et/aide de postgres.
Tout d'abord la définition des paramètres :
Base : base
Table : TABLE
Champ : nom_structure_en
nom de la procédure (fonctin sql) : trig_desc_null
nom du trigger : maj_nom_structure_en_vide
La création du trigger "maj_nom_structure_en_vide" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 CREATE TRIGGER maj_nom_structure_en_vide AFTER INSERT OR UPDATE OR DELETE ON base.TABLE FOR EACH ROW EXECUTE PROCEDURE trig_desc_null();
La fonction sql qui m’intéresse :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 UPDATE base.TABLE SET base.TABLE.nom_structure_en = base.TABLE.nom_structure_fr WHERE (((base.TABLE.nom_structure_en) Is Null));
La procédure "trig_desc_null" reprenant la fonction sql précédante :
Voilà, voilà.........
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 CREATE FUNCTION trig_desc_null() RETURNS trigger AS $maj_nom_structure_en_vide$ BEGIN -- Check that empname and salary are given IF sitra.SITRA_PATRIMOINE.nom_structure_en IS NULL THEN sitra.SITRA_PATRIMOINE.nom_structure_en = sitra.SITRA_PATRIMOINE.nom_structure_fr; END IF; END; $maj_nom_structure_en_vide$ LANGUAGE plpgsql;
Pour être franc je ne suis pas très sûr (pas du tout même) de la procédure. Et aussi, qu'est-ce que je fais d'elle. Je la copie dans un fichier texte que j'enregistre qq part ? Si oui où et comment je l'appelle ?
Autre question, pourquoi n'est-ce pas possible, ou alors je n'ai pas tout compris d'utiliser tout simplement la fonction sql plutôt que la procédure qui se trouve (encore) dans un autre langage et dans un fichier ?
Partager