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 14/11/2016 20:49:50

reimic5
Membre

trigger - update colonne par rapport à une autre table

Bonjour,

J'ai deux tables (Table1 et Table2). Je souhaiterais que la colonne 'taux' de la table1 s'update automatique quand la ligne est creer. ceci par rapport a la table2 de la colonne 'taux' en fonction de la colonne 'id_usager'.
Les taux de la Table2 peuvent changer.
Merci pour votre aide.

Table1 - encodages
id    id_usager    temps    taux
111    5            15            105
112    2            20            102
113    4            21   
114    1            36   
115    5            45   

Table2 - usager
id    nom    taux
1    toto    11
2    titi    102
3    tata    130
4    tutu    14
5    tete    105

Dernière modification par reimic5 (14/11/2016 21:06:30)

Hors ligne

#2 14/11/2016 21:16:52

rjuju
Administrateur

Re : trigger - update colonne par rapport à une autre table

Je rate peut être quelque chose, mais pourquoi ne pas tout simplement faire une jointure pour trouver le taux plutôt que dupliquer l'information ?

Hors ligne

#3 14/11/2016 21:50:41

reimic5
Membre

Re : trigger - update colonne par rapport à une autre table

dans la table1, c'est l'encodage des usagers avec le temps d'intervention avec une colonne date que je n'ai pas ajoute ici. une fois le taux fixe dans la ligne, il ne devra plus etre modifie.
dans la table2, c'est une table des usagers avec leur taux horaire en sachant que se taux pourra etre change a tout moment par le RH.

merci pour votre aide.

Dernière modification par reimic5 (14/11/2016 22:11:19)

Hors ligne

#4 14/11/2016 21:59:32

rjuju
Administrateur

Re : trigger - update colonne par rapport à une autre table

D'accord.

Du coup, quelle erreur rencontrez-vous dans votre trigger ?

Hors ligne

#5 14/11/2016 22:10:15

reimic5
Membre

Re : trigger - update colonne par rapport à une autre table

je ne sais pas l'ecrire.

Hors ligne

#6 14/11/2016 22:17:15

rjuju
Administrateur

Re : trigger - update colonne par rapport à une autre table

La documentation fourni tout le nécessaire pour cela : http://docs.postgresql.fr/9.6/plpgsql-trigger.html

Hors ligne

#7 14/11/2016 22:23:59

reimic5
Membre

Re : trigger - update colonne par rapport à une autre table

je suis en 9.5. je vais voir cela et merci pour votre reponse.

Hors ligne

#8 15/11/2016 17:38:52

reimic5
Membre

Re : trigger - update colonne par rapport à une autre table

punaise je n'arrive pas
pouvez-vous m'aider, merci.

Hors ligne

#9 15/11/2016 18:35:02

gleu
Administrateur

Re : trigger - update colonne par rapport à une autre table

Qu'avez-vous essayé ?


Guillaume.

Hors ligne

#10 22/11/2016 12:58:44

reimic5
Membre

Re : trigger - update colonne par rapport à une autre table

https://s16.postimg.org/4v51a6ez9/Capture5.jpg

---
CREATE TRIGGER tr_insert_taux
    after INSERT ON table1
    FOR EACH ROW
    EXECUTE PROCEDURE fc_insert_taux();
---
create or replace function fc_insert_taux() RETURNS text AS $$
begin
update table1
set table1.taux=table2.taux
where table2.id=table1.id_usager
end;

Dernière modification par reimic5 (22/11/2016 16:06:58)

Hors ligne

#11 22/11/2016 22:53:38

rjuju
Administrateur

Re : trigger - update colonne par rapport à une autre table

Si vous regardez la documentation (http://docs.postgresql.fr/9.6/plpgsql-t … er-example par exemple), il y a déjà 2 erreurs :

- vous devriez avoir un trigger BEFORE INSERT
- vous devriez modifier NEW.taux plutôt que faire un update (qui à vue de nez ne fera pas du tout ce que vous voulez)

Hors ligne

#12 23/11/2016 12:08:33

reimic5
Membre

Re : trigger - update colonne par rapport à une autre table

voici comment j'ai fait, si ca peut servir a une autre personne.


--trigger tr_insert_taux
CREATE TRIGGER tr_insert_taux
  BEFORE INSERT
  ON public.table1
  FOR EACH ROW
  EXECUTE PROCEDURE fc_insert_taux();

--fonction fc_insert_taux
begin
NEW.taux := (SELECT taux FROM table2 WHERE id = NEW.id_usager);
RETURN NEW;
end;

merci.

Hors ligne

Pied de page des forums