1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
CREATE FUNCTION historisation (NEW, OLD, nom_vue varchar,
utilisateur varchar, id_utilisateur integer,
type_modif integer, id_ligne integer) RETURNS void AS $$
$BODY$
-- comme vous pouvez le voir je ne déclare pas correctement NEW et OLD
-- je ne sais quel format je doit leur attribuer.
DECLARE
knew TEXT;
kold TEXT;
vnew TEXT;
vold TEXT;
vgroupenew TEXT;
vgroupeold TEXT;
colonne TEXT;
BEGIN
--initialisation de mes variables a vide au lieu de NULL
vgroupeold = coalesce(vgroupeold, '');
vgroupenew = coalesce(vgroupenew, '');
colonne = coalesce(colonne, '');
--double boucle afin de balayer mes deux listes, même si la solution la plus efficace
--aurais été d'incrémenter simultanément les index des deux listes
FOR knew,vnew IN select key,value from each(hstore(NEW)) LOOP
FOR kold,vold IN select key,value from each(hstore(OLD)) LOOP
IF((knew = kold) AND (vnew <> vold))then
vgroupeold = vold || '/' || vgroupeold;
vgroupenew = vnew || '/' || vgroupenew;
colonne = kold || '/' || colonne;
end if;
END LOOP;
END LOOP;
-- mon insert dans ma table de mofication
INSERT INTO historisation(
anciennevaleur, nouvellevaleur, vue, colonnemodifier, modificateur,
idmodificateur, typemodif, idmodifie)
VALUES (vgroupeold, vgroupenew, nom_vue, colonne, utilisateur,
id_utilisateur , type_modif, id_ligne);
END
$BODY$
$$ LANGUAGE SQL; |
Partager