Message post� par : Brindavoine
----------------------------------------
Merci.
J'ai aussi résolu le problème en passant comme ceci :
-----------------
Code :
CREATE OR REPLACE FUNCTION api_sig.maj_orient()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
DECLARE
v_application_name varchar;
v_ownertable varchar;
BEGIN
-- la fonction a pour objet de renvoyer la bonne valeur dans la table geomorient (ACAD
MAP) si
-- l'attribut rotation est mis à jour et inversement
-- attention au boucle infinie...
--cas update
IF TG_OP = 'UPDATE' THEN
-- mise à jour de geomorient
if old.rotation is null or (old.rotation <> 360 - new.geomorient)
then new.rotation := 360 - new.geomorient;
end if;
-- mise à jour de rotation
if old.geomorient is null or (-new.rotation +360 <> old.geomorient)
then new.geomorient := -new.rotation +360;
raise notice '% => %', old.geomorient, new.geomorient;
end if;
end if ;
--cas insert
IF TG_OP = 'INSERT' then
if new.geomorient is not null and new.rotation is null
then new.rotation := 360 - new.geomorient;
end if;
if new.rotation is not null and new.geomorient is null
then new.geomorient := -new.rotation +360;
end if;
end if;
return NEW;
END;
$function$
;
COMMENT ON FUNCTION api_sig.maj_orient() IS 'Fonction générique pour la mise à jour
des orientations / rotations.';
create
trigger tel_regardorient before insert
or update
of rotation,
geomorient on
corps_rue.tel_regard for each row execute procedure api_sig.maj_orient();;
-----------------
Et cela fonctionne tel que désiré.
----------------------------------------
Le message est situ�
https://georezo.net/forum/viewtopic.php?pid=320739#p320739
Pour y r�pondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous d�sabonner connectez-vous sur le forum puis Profil / Abonnement
----------------------------------------
Message précédent posté par tevrard le 03/05/19 14:54
La question que tu soulèves me fait penser au point "FOR EACH ROW / FOR EACH
STATEMENT" dont on avait discuté ici :
https://georezo.net/forum/viewtopic.php?id=112809
----------------------------------------
Message précédent posté par Pierre le 03/05/19 10:27
Aloha
Nous avons un ensemble de tables qui ont deux colonnes contenant sensiblement la même
information : une colonne rotation et une colonne orientation. L'une est destinée à
être utilisée dans Qgis, l'autre dans un autre outil.
Nous rencontrons un problème : si il est simple de créer un trigger mettant à jour la
colonne orientation depuis la valeur rotation, nous ne savons pas comment créer un trigger
qui mettrait à jour la valeur orientation si la valeur rotation change et la valeur
rotation si la valeur orientation change, sans que cela ne crée une boucle
"infinie".
Nous pensions passer l'information du nom de l'application pour gérer les
différents cas dans le trigger :
Quelque chose comme
-----------------
Code :
create or replace function api_sig.maj_orient()
returns trigger
language plpgsql
as $function$
declare
v_app varchar(255)
begin
if "application_name" = 'QGIS'
then .... new.orientation:= 360-new.rotation ;
else .... new.rotation := 360+new.orientation ;
end if ;
return new;
end,
$function$;
-----------------
Avez-vous déjà passé ce type de paramètre à une fonction/trigger ? Est-ce une méthode
efficace ? Vaut-il mieux envisager le problème autrement ?
D'avance, merci
----------------------------------------
--
Association GeoRezo - le portail g�omatique
http://georezo.net