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 10/02/2011, 16h23   #1
Membre confirmé
 
Développeur informatique
Inscription : janvier 2010
Messages : 185
Détails du profil
Informations personnelles :
Âge : 54

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2010
Messages : 185
Points : 233
Points : 233
Par défaut creation d'un trigger

Bonjour

Sous PostgreSQL 8.4, je crée la fonction suivante, et cela marche bien : elle est bien visible dans mon schema public, et son propriétaire est correct.

Code :
1
2
3
4
5
6
CREATE OR REPLACE FUNCTION upd_matable(id integer) RETURNS void AS $BODY$
UPDATE matable
SET UpdateDate=NOW() 
WHERE Id=$1
$BODY$
LANGUAGE 'sql' VOLATILE;
Ensuite, je tente de créer le trigger suivant :

Code :
1
2
3
CREATE TRIGGER trg_matable AFTER UPDATE ON matable
FOR EACH ROW     
EXECUTE PROCEDURE upd_matable(Id);
J'obtiens le message d'erreur :

La fonction upd_matable() n'existe pas.

Voyez-vous où est mon erreur, ou ce qu'il manque ?
__________________
Cordialement,
Tintinux

Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
Elle est en cours de développement, avec Lazarus. Vous pouvez peut-être aider à la tester, la traduire et même à la développer.
tintinux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 23h54   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 769
Points : 17 769
Extrait de la doc en ligne :

http://www.postgresql.org/docs/8.1/s...tetrigger.html

Code :
1
2
3
CREATE TRIGGER name { BEFORE | AFTER } { event [ OR ... ] }
    ON TABLE [ FOR [ EACH ] { ROW | STATEMENT } ]
    EXECUTE PROCEDURE funcname ( arguments )
et :

arguments
An optional comma-separated list of arguments to be provided to the function when the trigger is executed. The arguments are literal string constants. Simple names and numeric constants may be written here, too, but they will all be converted to strings. Please check the description of the implementation language of the trigger function about how the trigger arguments are accessible within the function; it may be different from normal function arguments.

Or ID n'est visiblement ni pas statique (constante) ni chaine de caractère !!!!

Bref, commencez par appliquer le conseil en gras !

Quelques exemples : http://www.btsinfogap.org/cours/s2/i...s_plpgsql.html

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 16h25   #3
Membre confirmé
 
Développeur informatique
Inscription : janvier 2010
Messages : 185
Détails du profil
Informations personnelles :
Âge : 54

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2010
Messages : 185
Points : 233
Points : 233
Merci pour cette réponse, et surtout pour le lien vers les exemples qui m'ont bien aidé à réaliser le trigger.

Il faut donc créer une "fonction trigger" avec un type retourné et une syntaxe qui n'est apparemment pas mentionnée dans la documentation officielle.

Code :
1
2
CREATE OR REPLACE FUNCTION upd_row()
  RETURNS TRIGGER AS

Voir ici ce que j'ai finalement fait, si cela peut être utile à d'autres.
__________________
Cordialement,
Tintinux

Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
Elle est en cours de développement, avec Lazarus. Vous pouvez peut-être aider à la tester, la traduire et même à la développer.
tintinux 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 11h56.


 
 
 
 
Partenaires

Hébergement Web