banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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.


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

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.


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

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

 

Pied de page des forums

Powered by FluxBB