#1 Mon 12 March 2018 12:53
- sporito
- Participant actif
- Date d'inscription: 4 Mar 2008
- Messages: 126
Trigger jointure spatiale via PGADMIN3
Bonjour,
je réalise mon trigger sous pgadmin3 et 1ere ligne, 1er message d'erreur lors de la création de la fonction:
(J'ai 2 couches, une point et une polygone (commune_BV), le but est de rapatrié le champ nom(commune) dans la couche de point lorsque je crée un nouveau point).
Code de ma fonction:
CREATE OR REPLACE FUNCTION update_nomcom()
RETURNS trigger AS
$$
BEGIN
select into new.nomcommune nom from COMMUNE_BV where st_within(new.geom, geom);
return new ;
END;
$$ LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION update_nomcom()
OWNER TO postgres;
Message d'erreur:
syntax error at or near "CREATE"
Line 2: $BODY$CREATE OR REPLACE FUNCTION update_nomcom()
Hors ligne
#2 Mon 12 March 2018 14:09
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: Trigger jointure spatiale via PGADMIN3
Il y a une dollar quote avant le début votre requête de création.
$BODY$CREATE OR REPLACE FUNCTION update_nomcom()
Passez par le constructeur de requête pour créer votre fonction.
Sinon simple remarque de conception, mais peut être y avez vous déjà penser :
une vue serait peut être plus appropriée pour faire ce que vous voulez.
Dernière modification par tumasgiu (Mon 12 March 2018 14:09)
Hors ligne
#3 Mon 12 March 2018 14:13
- JP LLORENS
- Participant assidu
- Date d'inscription: 12 Nov 2008
- Messages: 231
Re: Trigger jointure spatiale via PGADMIN3
Bonjour
J'aurais tendance à écrire :
Code:
CREATE OR REPLACE FUNCTION update_nomcom() RETURNS trigger AS $BODY$DECLARE BEGIN .... return NEW; END;$BODY$ LANGUAGE plpgsql ...
JP
Dernière modification par JP LLORENS (Mon 12 March 2018 14:15)
Hors ligne
#4 Mon 12 March 2018 14:37
- sporito
- Participant actif
- Date d'inscription: 4 Mar 2008
- Messages: 126
Re: Trigger jointure spatiale via PGADMIN3
J'ai essayer en ajoutant DECLARE mais ça ne fonctionne toujours pas, je pense que le pb se situe avant, comme l'impression qu'il ne reconnait pas la commande CREATE, je ne comprends pas.
J'ai fait clic droit sur fonction, ajouter fonction et ensuite il me demande d'insérer le langage plpgsql puis le code.
Hors ligne
#5 Mon 12 March 2018 14:41
- sporito
- Participant actif
- Date d'inscription: 4 Mar 2008
- Messages: 126
Re: Trigger jointure spatiale via PGADMIN3
la traduction SQL qui est faite, ça donne ça:
(donc j'ai l'impression que le message d'erreur s'appuie sur la version SQL)
CREATE FUNCTION "Installation"."update_nomcom()"() RETURNS character varying[] AS
$BODY1$CREATE OR REPLACE FUNCTION update_nomcom()
RETURNS trigger AS
$BODY$
BEGIN
select into new.nomcommune nom from COMMUNE_BV where st_within(new.geom, geom);
return new;
END;
$BODY$ LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION update_nomcom()
OWNER TO postgres;$BODY1$
LANGUAGE plpgsql VOLATILE NOT LEAKPROOF;
ALTER FUNCTION "Installation"."update_nomcom()"()
OWNER TO postgres;
Dernière modification par sporito (Mon 12 March 2018 14:45)
Hors ligne
#6 Mon 12 March 2018 15:14
- Ben22
- Participant actif
- Lieu: 33
- Date d'inscription: 11 May 2016
- Messages: 96
Re: Trigger jointure spatiale via PGADMIN3
Même punition si vous créez votre fonction dans une fenêtre sql standard ?
Peut-être ne faut-il mettre que le corps de la fonction dans la fenêtre "ajout d'une fonction" de pg_admin ?
Dernière modification par Ben22 (Mon 12 March 2018 15:15)
Hors ligne
#7 Mon 12 March 2018 15:15
- JP LLORENS
- Participant assidu
- Date d'inscription: 12 Nov 2008
- Messages: 231
Re: Trigger jointure spatiale via PGADMIN3
En tapant directement le code dans l'editeur sql, la fonction est crée sans problèmes
Code:
CREATE OR REPLACE FUNCTION update_nomcom() RETURNS trigger AS $BODY$DECLARE BEGIN select into new.nomcommune nom from COMMUNE_BV where st_within(new.geom, geom); return new; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION update_nomcom() OWNER TO postgres;
JP
Hors ligne
#8 Mon 12 March 2018 15:34
- sporito
- Participant actif
- Date d'inscription: 4 Mar 2008
- Messages: 126
Re: Trigger jointure spatiale via PGADMIN3
oui en effet Ben22, merci c'était ça, tous les éléments avant et après les $$ paraissaient comme une redite puisque je les rentre avec les autres onglets.
Exact JP et merci, mon code fonctionne très bien directement avec la requête SQL.
Bref une erreur de débutant.
Hors ligne
#9 Mon 12 March 2018 15:54
- sporito
- Participant actif
- Date d'inscription: 4 Mar 2008
- Messages: 126
Re: Trigger jointure spatiale via PGADMIN3
je suis pas encore au bout de mes peines..
la couche point est INSTALLATION_DPF:
lorsque je lance ma requête pr créer le trigger, j'ai un nouveau message d'erreur.
Hors ligne
#10 Mon 12 March 2018 16:09
- sporito
- Participant actif
- Date d'inscription: 4 Mar 2008
- Messages: 126
Re: Trigger jointure spatiale via PGADMIN3
en fait le pb, c'est qu'il ne reconnait pas les majuscules
Hors ligne
#11 Mon 12 March 2018 16:13
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: Trigger jointure spatiale via PGADMIN3
Je crois que vous avez omis le nom du schema.
Sinon pour les majuscules, les identifiants sont insensibles à la casse
sauf si vous les encadrez par des doubles quotes.
Hors ligne
#12 Thu 15 March 2018 10:19
- sporito
- Participant actif
- Date d'inscription: 4 Mar 2008
- Messages: 126
Re: Trigger jointure spatiale via PGADMIN3
Les messages d'erreurs ont disparu à partir du moment où je mettais des " " au niveau des tables et des schémas.
ex:
BEGIN
select into new.commune nom from "DPF_Installation"."COMMUNE_BV" where st_within(new.geom, geom);
return new ;
END;
Dernière modification par sporito (Thu 15 March 2018 10:21)
Hors ligne