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

Firebird Discussion :

Précision sur un trigger


Sujet :

Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Par défaut Précision sur un trigger
    Bonjour à tous

    Dans la plupart de mes tables, j'ai un champ DATE_MODIF
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DATE_MODIF          TIMESTAMP DEFAULT Current_Timestamp NOT NULL
    qui indique la date et heure de la modification de la ligne.

    Pour que la modification dans la date soit systématique, je place un trigger qui place la date du jour : facile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE OR ALTER TRIGGER B_personne_bu0 FOR B_personne
    ACTIVE BEFORE UPDATE POSITION 0
    AS
    begin
          NEW.Date_Modif = CURRENT_TIMESTAMP;
    end
    Or ce n'est pas toujours le cas en ayant à fournir une autre date pour la modification ...
    J'avais donc procédé comme ceci :
    un update "standard" (la date de modification est la date/heure de la modif) en faisant :
    1 -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE OR INSERT INTO B_PERSONNE (ID_PERSONNE)
        VALUES (:Id)
    MATCHING (ID_PERSONNE);
    et pour une date de modification fournit :
    2 -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE OR INSERT INTO B_PERSONNE (ID_PERSONNE, date_modif)
        VALUES (:Id, '1900-01-01')
    MATCHING (ID_PERSONNE);
    et je pensais (naïvement, sans doute) qu'en mettant un trigger
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR ALTER TRIGGER B_personne_bu0 FOR B_personne
    ACTIVE BEFORE UPDATE POSITION 0
    AS
    begin
       IF (NEW.Date_Modif IS NULL) THEN
          NEW.Date_Modif = CURRENT_TIMESTAMP;
    end
    que la valeur dans New.Date_Modif serait celle indiqué dans la requête. Que nenni
    La requête 2 fonctionne : la date de modif devient le 01/01/1900
    mais pour la requête 1 (où aucune date n'est fournit), la date_modif reste identique parce que la valeur dans New.Date_modif n'est pas NULL, mais bien la date déjà enregistrée.

    Y-a-t-il moyen de faire ce genre de chose ?
    ou il faut indiquer explicitement la date_Modif que l'on souhaite ?

    Je suis sous Firebird 2.5

    Cordialement
    olivier

  2. #2
    Membre Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Par défaut
    re bonjour

    j'ai trouvé une solution en modifiant mon trigger (ce qui évite de modifier les procédures faisant référence à cette colonne Data_Modif).
    Voici la modification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR ALTER TRIGGER B_personne_bu0 FOR B_personne
    ACTIVE BEFORE UPDATE POSITION 0
    AS
    begin
       IF (NEW.Date_Modif = OLD.Date_Modif) THEN
          NEW.Date_Modif = CURRENT_TIMESTAMP;
    end
    Je garde la discussion ouverte au cas où d'autres auraient une idée lumineuse

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Précision sur Oracle 9iAS r2
    Par Patmane dans le forum Oracle
    Réponses: 9
    Dernier message: 18/03/2007, 04h41
  2. Précisions sur Import/export
    Par electro dans le forum Import/Export
    Réponses: 9
    Dernier message: 15/10/2004, 13h34
  3. [Observateur] Précisions sur le design pattern Observer [UML]
    Par joquetino dans le forum Design Patterns
    Réponses: 2
    Dernier message: 07/10/2004, 22h35
  4. Précision sur les sauvegarde à chaud
    Par alxkid dans le forum Administration
    Réponses: 2
    Dernier message: 09/08/2004, 18h55
  5. Petite aide sur les triggers ?
    Par krimson dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 16/04/2004, 16h28

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