Précédent   Forum des professionnels en informatique > Bases de données > Sybase
Sybase Forum sur la base de données Sybase. Avant de poster -> F.A.Q Sybase, Tutoriels Sybase
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 16/01/2007, 16h53   #1
Débutant
 
Inscription : février 2003
Messages : 54
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 54
Points : 6
Points : 6
Par défaut problème de mise à jour via un trigger

Bonjour, j'ai un soucis avec un trigger que je n'arrive pas a résoudre.
Voici la partie du code du trigger qui me pose problème :
Code :
1
2
3
4
5
6
7
8
 
IF UPDATE(COMPL1) 
begin 
   UPDATE AFF 
   SET    MODIF_COMPL1 = getdate() 
   FROM   AFF A, inserted INS 
   WHERE  A.DOSS = INS.DOSS		 
end
Le pricipe est simple, je marque dans la colone MODIF_COMPL1 la date de dernière modification de mon champs COMPL1. Le problème est que si j'appelle ce trigger alors que dans l'update je lui donne la meme valeur que celle deja présente en base il me modifie le champs MODIF_COMPL1. Or, je souhaite que mon trigger fasse la différence entre une vrai modification (le champs COMPL1 a vraiment changé de valeur lors du update) et une "fausse" modification (le champs COMPL1 passé dans l'update a pour valeur la valeur qu'il avait déjà).
Voilà, en gros si la valeur de COMPL1 n'est pas modifié, je ne souhaite pas que le champs MODIF_COMPL1 soit modifiée lors de l'update.

J'espère être assez clair. N'hésitez pas à me demander si tel n'est pas le cas !

Merci d'avance pour une éventuelle idée permettant de résoudre mon problème

Clement
clement42 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 08h02   #2
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
Il suffit d'ajouter une condition à la clause WHERE:

Code :
1
2
3
4
5
6
7
8
9
 
IF UPDATE(COMPL1) 
begin 
   UPDATE AFF 
   SET    MODIF_COMPL1 = getdate() 
   FROM   AFF A, inserted INS 
   WHERE  A.DOSS = INS.DOSS		 
   AND      A.COMPL1 != INS.COMPL1
end
Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 09h18   #3
Débutant
 
Inscription : février 2003
Messages : 54
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 54
Points : 6
Points : 6
Non, j'avais déjà essayé, ca ne suffit pas. En effet, l'ensemble des valeur de la ligne insérée est, à ce moment, identique à l'ensemble des valeur de la ligne de la table AFF.
N'y a t il pas moyen de passer par un "trigger before update" ou quelque chose du genre ? Mais j'ai l'impression qu'il n'y a pas de nuance possible (before - after) avec sybase ....

Une idée ?

Merci
clement42 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 10h24   #4
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
Oops - cela fait lontemps que je n'ai plus ecrit de trigger de ce type.

En fait il faut comparer la valeur de COMP1 entre la table inserted (nouvelle valeur) et deleted (ancienne valeur).

Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 10h29   #5
Membre confirmé
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 181
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 181
Points : 267
Points : 267
Sur quelle table est ton trigger ?
le Champs DOSS est il une cle de cette table ?

Essaie peut etre de rajouter la table deleted DEL
et la jointure DEL.COMPL1!= INS.COMPL1
Jean.Cri1 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 19h56.


 
 
 
 
Partenaires

Hébergement Web