Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Débuter
Débuter Forum d'entraide : Débuter en base de données avec PostgreSQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/07/2011, 10h14   #1
Invité de passage
 
Inscription : juillet 2010
Messages : 8
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 8
Points : 0
Points : 0
Par défaut Trigger sur une table met à jour d'autres tables

Bonjour,
alors moi j'aimerais créer un trigger sur une table location, qui lors d'un ajout sur cette table, fait un update sur 2 autres tables mettant à jour les champs concernés.

Ces champs sont de type boolean donc true ou false.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
CREATE OR REPLACE FUNCTION dispo () RETURNS TRIGGER AS 
'
  DECLARE
    nodispo boolean;
    client varchar(4);
    voiture varchar(4);
  BEGIN 
    select into nodispo rendu from location;
    select into client id_client from location;
    select into voiture id_vehicule from location;
      update clients set location_dispo = nodispo 
	where id_client = client;
      update vehicules set dispo_vehicule = nodispo 
	where id_vehicule = voiture;
    return new;
  END; 
' 
LANGUAGE 'plpgsql';
Ensuite je définis cet fonction en trigger :

Code :
1
2
3
4
 
CREATE TRIGGER trig_dispo AFTER INSERT ON location 
  FOR EACH ROW 
  EXECUTE PROCEDURE dispo();
Ce code ne tiens en compte que de la première Insertion dans la table "location" et ne marche plus lors du deuxième insertion.

Quelqu'un pourrait m'aider et aussi m'expliquer le fonctionnement du Return NEW ??

merci d'avance,

KiAhS
KiAhS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 18h33   #2
Modérateur
 
Inscription : octobre 2008
Messages : 1 508
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 508
Points : 2 040
Points : 2 040
Cette partie de code est fausse:
Code :
1
2
3
   SELECT INTO nodispo rendu FROM location;
    SELECT INTO client id_client FROM location;
    SELECT INTO voiture id_vehicule FROM location;
parce qu'il n'y a pas qu'une seule ligne dans location.

Et en fait elle est inutile car les valeurs de la ligne en cours sont dans NEW.id_client, NEW.id_vehicule, etc.. pas besoin de requête select pour les trouver.

Il faut plutôt faire directement qqch du style:
Code :
1
2
3
4
5
      UPDATE clients SET location_dispo = NEW.rendu 
	WHERE id_client = NEW.id_client;
 
      UPDATE vehicules SET dispo_vehicule = NEW.rendu 
	WHERE id_vehicule = NEW.id_vehicule;
Quand au return new je ne suis pas sûr qu'il soit utile dans un trigger AFTER INSERT mais en tout cas il n'est pas génant.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h22.


 
 
 
 
Partenaires

Hébergement Web