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

Oracle Discussion :

Peux t on faire un trigger after update sur une COLONNE ?


Sujet :

Oracle

  1. #1
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut Peux t on faire un trigger after update sur une COLONNE ?
    Bonjour, je voudrai mettre a jour une colonne sous Oracle a chaque update sur une autre colonne. En fait a chaque fois qu'un utilisateur se deconnecte de mon appli, la date de deconnexion est mise a jour.
    Je voudrai automatiquement renseigner la duree entre la connexion et la deconnexion : Voici ce que je voudrai faire et qui ne passe pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    create or replace trigger AU_USERACTIVITY
      before update on useractivity.logoff
      for each row
    begin
    begin
        select DATEDIFF('mi', to_date(:OLD.LOGON, 'DD-MM-YY HH:MI:SS'), to_date(:OLD.LOGOFF, 'DD-MM-YY HH:MI:SS')) 
        into :NEW.DURATION from dual;
     
    end;
    end;
    Oracle me dit qu'il ne trouve pas useractivity.logoff, par contre il trouve useractivity

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Pourquoi donc faire un SELECT ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE TRIGGER AU_USERACTIVITY
      before UPDATE ON useractivity.logoff
      FOR each row
    begin
      :NEW.DURATION := DATEDIFF('mi', to_date(:OLD.LOGON, 'DD-MM-YY HH:MI:SS'), to_date(:OLD.LOGOFF, 'DD-MM-YY HH:MI:SS')) ;
    end;
    /

  3. #3
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut
    Tu as raison, le select est de trop... je ne suis pas habitue aux triggers.

    par contre j'ai essaye ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    create or replace trigger AU_USERACTIVITY
      after update on useractivity  
      for each row
    begin
    begin
     
        if(:OLD.LOGOFF is not null) then
     
            :NEW.DURATION := DATEDIFF('mi', :OLD.LOGON, :OLD.LOGOFF);
     
        end if;
     
    end;
    end;
    Mais il me dit qu'il ne peut pas modifier la valeur NEW pour un trigger after update. As tu une solution ?

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    bah oui, il faut un BEFORE UPDATE

  5. #5
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut
    Logiquement oui...

    Mais moi je veux calculer la duree entre une date de debut et une date de fin juste apres que la date de fin soit renseignee...
    Si mon trigger s'effectue before update, le logoff n'est pas encore enregistre non ?

  6. #6
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    à ton avis quand le trigger se déclenche ? C'est lorsque tu fais l'update donc tu connais les 2 valeurs. BEFORE ou AFTER signifie avant l'écriture de la ligne... donc après évidemment c'est trop tard pour changer la valeur

Discussions similaires

  1. Trigger AFTER UPDATE avec une FOREIGN KEY
    Par brruno dans le forum Développement
    Réponses: 6
    Dernier message: 11/02/2015, 10h39
  2. [2008R2] Trigger d'update sur une seconde BD + champ date
    Par CHoule dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/05/2014, 09h09
  3. Comment faire un trigger after update multiple
    Par java250r dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/08/2012, 17h20
  4. Performance d'un update sur une colonne
    Par melendil dans le forum DB2
    Réponses: 2
    Dernier message: 31/03/2009, 14h41
  5. Réponses: 4
    Dernier message: 31/10/2006, 19h03

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