Bonjour,

Je vien vers vous car je me trouve dans une impasse.
Je suis sur la réalisation d'une fonction SQL qui me permet une historisation des differentes modifications sur mes vues.
Mon problème réside dans mon incapacité à faire passer NEW et OLD dans cette fonction.

ma fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;