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 :

[Oracle8i][Triggers]Desactiver un trigger pour une procédure seulement


Sujet :

Oracle

  1. #1
    Membre émérite Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Points : 2 453
    Points
    2 453
    Par défaut [Oracle8i][Triggers]Desactiver un trigger pour une procédure seulement
    Bonjour,

    Voila mon problème j'ai une procédure P1 qui met à jour une table T1 de nombreuses fois. Cette mise à jour active un Trigger TG1.

    Tout cela fonctionne tres bien. Le problème c'est que cet appel au trigger prend enormement de temps car répété de nombreuses fois, et que (tests à l'appui) en faisant le traitement du trigger directement dans P1 cela va beaucoup plus vite.

    La solution simple serait, direz vous, de supprimer le trigger. Oui mais voila des procédures P2, P3 ... utilisent aussi ce trigger. Et comme P1 est un traitement long, on ne peut ni supprimer TG1, ni le désactiver le temps d'execution de P1 vu que P2 ou une autre procédure risque de s'activer pendant ce temps la.
    Le but bien sur n'étant pas de faire passer le traitement du trigger dans chaque procédure utilisant celui-ci pour pouvoir s'en débarasser.

    J'ai essaye de mettre un variable globale testée en début de trigger pour lui dire si il doit effectuer ou non son traitement, mais le gain de temps est négligeable, ce n'est en effet pas le traitement qui prend du temps mais reellement les activations repetées du trigger.

    Voila le code du début du trigger
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE OR REPLACE TRIGGER TG1
    BEFORE INSERT OR UPDATE OF Col1, Col2 ON T1
    FOR EACH ROW
    BEGIN
    ...
    END;
    Merci d'avance.

  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
    ça m'étonnerait... as-tu fait une trace pour t'assurer que c'est bien le trigger qui pose problème ou au moins le désactiver pendant le test ?

  3. #3
    Membre émérite Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Points : 2 453
    Points
    2 453
    Par défaut
    Oui j'ai fait de nombreux tests en activant et desactivant le trigger.
    Et aussi en laissant le trigger active mais sans aucune action à l'interieure.

    Pour un test qui met 45sec avec le trigger active, je passe à 23sec si je desactive le trigger avant chaque mise à jour et que je le reactive apres (pas acceptable comme solution mais c'était pour les tests), 9sec si je desactive completement le trigger et 42sec pour un trigger qui se contente de tester la valeure d'une variable globale et qui ne fait rien d'autre.

  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
    et si tu ajoutes une colonne et la clause WHEN col = ?

  5. #5
    Membre émérite Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Points : 2 453
    Points
    2 453
    Par défaut
    Victoire !!!!!!!!!!!!!

    Merci beaucoup !!!!!

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

Discussions similaires

  1. Un trigger qui se declanche pour une vue
    Par redabadache3 dans le forum PL/SQL
    Réponses: 3
    Dernier message: 31/10/2007, 09h10
  2. Aide pour une procédure stockée
    Par shirya dans le forum Langage SQL
    Réponses: 1
    Dernier message: 02/03/2007, 08h48
  3. Réponses: 2
    Dernier message: 03/12/2006, 12h37
  4. aide pour une procédure
    Par beberd dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 08/11/2006, 09h57
  5. Réponses: 9
    Dernier message: 31/01/2006, 09h04

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