Bonjour,

Je travaille sur une base SQLite avec une partie Géométrie (une colonne bien à part).
Je dispose d'une couche de lignes extrait_hyl qui va pas mal évoluer et je souhaiterai tracer ces évolutions dans une table l_hyl_evol, qu'elles soient géométriques et/ou attributaires.
Je me suis donc tourné vers les triggers.

J'ai donc déjà préparé des triggers permettant de récupérer les nouveaux objets et ceux qui ont été supprimés dans l_hyl_evol.

Maintenant, j'aimerai tracer les modifications des attributs et de la géométrie.
Mais j'aimerai isoler ces 3 cas :
- les seuls changements d'attribut
- les seuls changements de géométrie
- les changements d'attributs et de géométrie

Je pensais donc alimenter la même table l_hyl_evol en renseignant un champ sur le type de changement (modification géométrique et/ou attributaire).

Voici ce que ça donne pour l'instant :

Trigger pour un changement attributaire :
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
CREATE TRIGGER update_hyl AFTER UPDATE OF SENS, CODE_HYDRO, C_HYD_CDO, C_ENT_SURF, FPKH, TPKH, CODE_ZONE ON extrait_hyl
WHEN new.Geometry = old.geometry and (old.sens <> new.sens OR old.code_hydro <> new.code_hydro OR old.c_hyd_cdo <> new.c_hyd_cdo OR old.c_ent_surf <> new.c_ent_surf 
OR old.fpkh <> new.fpkh OR old.tpkh <> new.tpkh OR old.code_zone <> new.code_zone)
  BEGIN
    INSERT INTO l_hyl_evol(id_bdcarth,
							type_modif,
							date_modif,
							date_geom,
							sens,
							code_hydro,
							c_hyd_cdo,
                            c_ent_surf,
							fpkh,
							tpkh,
							code_zone,                            
                            Geometry)
    VALUES (OLD.id_bdcarth,
			  'Modification attributaire',
			  datetime('now'),
			  Null,
			  OLD.sens,
			  OLD.code_hydro,
			  OLD.c_hyd_cdo,
              OLD.c_ent_surf,
			  OLD.fpkh,
			  OLD.tpkh,
			  OLD.code_zone,              
              OLD.Geometry);
  END;
Ce code fonctionne.

Trigger pour une modification géométrique (ne fonctionne pas) :
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
CREATE TRIGGER update_geom AFTER UPDATE OF Geometry ON extrait_hyl
WHEN old.sens = new.sens AND old.code_hydro = new.code_hydro AND old.c_hyd_cdo = new.c_hyd_cdo AND old.c_ent_surf = new.c_ent_surf 
AND old.fpkh = new.fpkh AND old.tpkh = new.tpkh AND old.code_zone = new.code_zone
  BEGIN
    INSERT INTO l_hyl_evol(id_bdcarth,
							type_modif,
							date_modif,
							date_geom,
							sens,
							code_hydro,
							c_hyd_cdo,
                            c_ent_surf,
							fpkh,
							tpkh,
							code_zone,                            
                            Geometry)
    VALUES (OLD.id_bdcarth,
			  'Modification géométrique',
			  Null,
			  datetime('now'),
			  OLD.sens,
			  OLD.code_hydro,
			  OLD.c_hyd_cdo,
              OLD.c_ent_surf,
			  OLD.fpkh,
			  OLD.tpkh,
			  OLD.code_zone,              
              OLD.Geometry);
  END;
Avez-vous des idées ?

Je sais pas si j'ai été très clair mais je le serai davantage si besoin.
Merci beaucoup et bonne journée