Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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

 La 5ème édition des GeoDataDays aura lieu les 14 et 15 septembre 2022 au Futuroscope de Poitiers. 

Le détail du programme et des intervenants est disponible sur le site de l'évènement.

#1 Tue 31 July 2018 13:15

SIGCMC56
Membre
Date d'inscription: 9 Jul 2018
Messages: 22

UPDATE sur un Trigger avec PostgreSQL

Bonjour,

Je travaille avec Postgresql et QGIS 2.18. J'essaye de faire fonctionner un Trigger qui permettrait la mise à jour des données saisies via une Vue dans QGIS.
Tout fonctionne pour l'insertion de nouvelles données, mais je n'arrive pas à mettre à jour ou supprimer.

Qgis me retourne le message d'erreur :  ERROR:  column reference "id_A" is ambiguous.

Le code de mon Trigger est le suivant :

Code:

CREATE OR REPLACE FUNCTION MonTrigger()
  RETURNS trigger AS
$BODY$
DECLARE id_A BIGINT;
BEGIN
    IF (TG_OP = 'INSERT') THEN SELECT nextval('seq_A') INTO NEW.id_A;
        
        INSERT INTO TableA (id_A, geom, num_A) 
               VALUES (NEW.id_A, NEW.geom, NEW.num_A);
      

    INSERT INTO TableB (A_id, num_B) 
               VALUES (NEW.id_A, NEW.num_B);
        RETURN NEW;
        
    ELSIF (TG_OP = 'UPDATE') THEN
           
           UPDATE TableA SET (geom, num_A) 
  
                 = (NEW.geom, NEW.num_A)
        WHERE id_A = NEW.id_A;

    UPDATE TableB SET (num_B) 
  
                 = (NEW.num_B)
        WHERE A_id = NEW.id_A;

            RETURN NEW;
    
     ELSIF (TG_OP = 'DELETE') THEN
        DELETE FROM TableA WHERE id_A = OLD.id_A;
    DELETE FROM TableB WHERE A_id = OLD.id_A;
    
       RETURN NULL;
    
 END IF;
END;
$BODY$

Quelqu'un peut-il m'aider?

Hors ligne

 

#2 Tue 31 July 2018 15:55

Ben22
Membre
Lieu: 33
Date d'inscription: 11 May 2016
Messages: 94

Re: UPDATE sur un Trigger avec PostgreSQL

Je me demande si le fait de déclarer votre variable utilisée pour la séquence de l'insert, du même nom que le champ identifiant qui sert dans le clause where de l'update ou le delete ne le gène pas ?!

Vous avez essayé en lui donnant un autre nom dans votre déclaration de variable ?

En ligne

 

#3 Tue 31 July 2018 16:20

jmarsac
Membre
Lieu: NICE
Date d'inscription: 26 Oct 2005
Messages: 514
Site web

Re: UPDATE sur un Trigger avec PostgreSQL

Bonjour,

Sauf erreur, la ligne

Code:

DECLARE id_A BIGINT;

ne sert à rien et comme le dit Ben22 provoque certainement l'erreur. Ce serait plutôt (non testé)  :

Code:

CREATE OR REPLACE FUNCTION MonTrigger()
  RETURNS trigger AS
$BODY$

BEGIN
    IF (TG_OP = 'INSERT') THEN SELECT nextval('seq_A') INTO NEW.id_A;
        
        INSERT INTO TableA (id_A, geom, num_A) 
               VALUES (NEW.id_A, NEW.geom, NEW.num_A);
      

    INSERT INTO TableB (A_id, num_B) 
               VALUES (NEW.id_A, NEW.num_B);
        RETURN NEW;
        
    ELSIF (TG_OP = 'UPDATE') THEN
           
           UPDATE TableA SET (geom, num_A) 
  
                 = (NEW.geom, NEW.num_A)
        WHERE id_A = NEW.id_A;

    UPDATE TableB SET (num_B) 
  
                 = (NEW.num_B)
        WHERE A_id = NEW.id_A;

            RETURN NEW;
    
     ELSIF (TG_OP = 'DELETE') THEN
        DELETE FROM TableA WHERE id_A = OLD.id_A;
    DELETE FROM TableB WHERE A_id = OLD.id_A;
    
       RETURN NULL;
    
 END IF;
END;
$BODY$

Quelqu'un peut-il m'aider?

Jean-Marie
Azimut

Hors ligne

 

Pied de page des forums

Powered by FluxBB

Partagez  |