Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels 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 27/09/2006, 11h37   #1
Invité de passage
 
Inscription : avril 2006
Messages : 8
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 8
Points : 3
Points : 3
Par défaut Passer une valeur a un trigger ?

Je souhaiterai passer un argument a un trigger afin que celui-ci le passe a la fonction qu'il appelera... je m'explique

J'ai une table
livre(...,...,editeur,...) et une table editeur(nom_editeur,...)

Je souhaite lorsque j'ajoute un livre, verifier si "livre.editeur" existe dans la table editeur et sinon l'ajouter...

j'ai fait la fonction suivante afin de faire le travail :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
CREATE FUNCTION maj_editeurs() RETURNS TRIGGER AS
'
	DECLARE
		exist integer;
	BEGIN
		SELECT INTO exist COUNT(editeurs) FROM editeurs WHERE nom_editeur="TG_ARGV[0]";
		IF exist ISNULL THEN
			INSERT INTO editeurs(nom_editeur) VALUES("TG_ARGV[0]");
		END IF;
	END;
'
LANGUAGE 'plpgsql';
Et j'ai fait ce Trigger afin d'appeler la fonction

Code :
1
2
3
CREATE TRIGGER livres_editeurs AFTER INSERT 
	ON livre FOR EACH STATEMENT
	EXECUTE PROCEDURE maj_editeurs()
Mon probleme est que je souhaite appeler la fonction avec un argument
qui serait le nom de l'éditeur (livre.editeur), mais pour cela je dois recupere ce nom dans le trigger... Comment faire ?
ALPAX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2006, 12h27   #2
Invité de passage
 
Inscription : avril 2006
Messages : 8
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 8
Points : 3
Points : 3
Bon ben je vous fais la réponse aussi ...

Il faut utiliser NEW :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE FUNCTION maj_editeurs() RETURNS TRIGGER AS
'
	DECLARE
		exist integer;
	BEGIN
		SELECT INTO exist COUNT(editeurs) FROM editeurs WHERE nom_editeur=NEW.editeur;
		IF exist ISNULL THEN
			INSERT INTO editeurs(nom_editeur) VALUES(NEW.editeur);
		END IF;
	END;
        RETURN NEW
'
LANGUAGE 'plpgsql';
pti lien pratique :
http://www.postgresql.org/docs/8.0/s...l-trigger.html
ALPAX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2006, 12h43   #3
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
Juste une question, ce ne serait pas plutot FOR EACH ROW ??

Code :
1
2
3
CREATE TRIGGER livres_editeurs AFTER INSERT 
	ON livre FOR EACH ROW
	EXECUTE PROCEDURE maj_editeurs()
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h27.


 
 
 
 
Partenaires

Hébergement Web