IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sybase Discussion :

problème de mise à jour via un trigger


Sujet :

Sybase

  1. #1
    Débutant
    Inscrit en
    Février 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 54
    Points : 35
    Points
    35
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    Il suffit d'ajouter une condition à la clause WHERE:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Débutant
    Inscrit en
    Février 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 54
    Points : 35
    Points
    35
    Par défaut
    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

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    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

  5. #5
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 247
    Points : 473
    Points
    473
    Billets dans le blog
    1
    Par défaut
    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

Discussions similaires

  1. [XL-2007] Problème Listbox, mise à jour BD via textbox
    Par cathodique dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 12/12/2014, 21h57
  2. [AC-2010] Probléme de mise à jour via une requête
    Par TeoSitran dans le forum Requêtes et SQL.
    Réponses: 22
    Dernier message: 21/03/2014, 13h51
  3. Réponses: 3
    Dernier message: 11/01/2013, 15h28
  4. Réponses: 3
    Dernier message: 15/09/2008, 09h32
  5. [trigger] problème de mise à jour
    Par Ouark dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 23/03/2006, 02h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo