PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 22/04/2022 09:38:26

Nyldan
Membre

fonction et trigger concatenation

Bonjour,

je suis nouveau et débutant en SIG.

Je souhaiterais concaténer 3 champs (insee,'_'ar_num,'_'lum_numero) d'une table afin de mettre à jour un quatrième champ (ident) de cette même table lorsque l'un des 3 premiers champs cité est modifié.

Je travaille avec PGAdmin.

Si j'ai bien compris, je dois créer une fonction générale que je pourrais éventuellement appliquer à plusieurs tables et ensuite j'applique un trigger sur la table concernée?

J'ai récupéré un exemple que j'ai modifié mais il doit y avoir une erreur dès le départ.

Fonction:

CREATE OR REPLACE FUNCTION nom_fonction()
    RETURNS trigger
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE NOT LEAKPROOF
AS $BODY$
    BEGIN
        new.ident := concat(insee,'_',ar_numero,'_',lum_numero);
    RETURN NEW;
END

$BODY$;

Trigger:

CREATE TRIGGER test
    BEFORE INSERT OR UPDATE OF insee, ar_numero, lum_numero
    ON schema.matable
    FOR EACH ROW
    EXECUTE FUNCTION nom_fonction();

Lorsque je modifie un des trois champs dans QGIS, j'ai un message d'erreur me disant que les colonnes sélectionnées n'existent pas:

Impossible de valider les changements pour la couche geo_ep_points_lumineux_plugin

Erreurs : ERREUR : 1 modification(s) de valeurs d'attribut n'ont pas été effectuée(s).
 
Erreur du fournisseur de données :
      Erreur PostGIS lors de la modification d'attribut : ERROR:  column "insee" does not exist
    LINE 1: SELECT concat(insee,'_',ar_numero,'_',lum_numero)
                          ^
    QUERY:  SELECT concat(insee,'_',ar_numero,'_',lum_numero)
    CONTEXT:  PL/pgSQL function nom_fonction() line 3 at assignment

Lorsque je ne renvoie pas à une colonne et uniquement à du texte dans la fonction, le trigger fonctionne et mon champ se remplie avec le texte concerné.

J'espère avoir été clair, et je vous remercie par avance de votre aide.

Hors ligne

#2 22/04/2022 10:01:42

dverite
Membre

Re : fonction et trigger concatenation

Dans la fonction il faut se référer au champ insee par new.insee et non insee tout seul, de même pour les autres champs de la table.

Hors ligne

#3 22/04/2022 10:12:08

Nyldan
Membre

Re : fonction et trigger concatenation

Bonjour,

merci beaucoup pour votre réactivité! Ça ne tenait pas à grand chose...

Hors ligne

Pied de page des forums