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

SQL Oracle Discussion :

Trigger / Ecriture dans un fichier


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Par défaut Trigger / Ecriture dans un fichier
    Bonjour à tous.

    Après des recherches infructueuses je m'adresse à vous.

    Tout d'abors je travail avec Oracle 10g XE.

    J'aimerai créer un trigger qui à chaque INSERT/UPDATE/DELETE écrive dans un fichier les champs de l'enregistrement concerné.

    Etant un novice d'Oracle voici ce que j'aimerai savoir:

    - Faut il que je crée trois trigger (un pour insert, un pour update, un pour delete), ou puis je le faire en un seul;
    - Quelle est la commande ou ps qui me permette d'écrire dans un fichier.

    Pour l'instant j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE TRIGGER TRG_DELETE_ON_MA_TABLE
    AFTER DELETE ON MA_TABLE
    ;
    ; Ecrire les valeur de l'enregistrement concerné (sans un fichier texte plat, genre .csv)
    ;
    END;
    Merci de votre aide.

    Ben.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2008
    Messages : 75
    Par défaut un meme trigger
    tu peux faire le traitement dans un seul trigger
    exp
    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 TRG_DELETE_ON_MA_TABLE
      AFTER INSERT OR DELETE  OR UPDATE ON Ma_table
    DECLARE
    ...
    BEGIN
    if deleting then
         ....;
    elsif inserting then
        .....;
    else --updating
      .........;
    END IF;
    END;

  3. #3
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Dans un trigger, toute action qui n’est pas transactionnelle, comme l’écriture dans un fichier par exemple, est une très mauvaise pratique de programmation. Vous devez envisager une autre solution.

  4. #4
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Par défaut
    Ok mnitu, par contre d'après les spécifications techniques je n'ai pas le choix.

    Pour que tu comprenne mieux, on met en place un bus de données (ESB) qui synchronise différents flux (différentes bdd, oracle pour ma part), et l'échange se fait via des fichiers plats (csv ou xml par exemple).

    Donc je comprend que cela n'est pas recommandé, mais est-il possible de le faire, ou alors quelle serai la solution (sans passer par les trigger) ?

    Merci.

    Ben.

  5. #5
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Les triggers sont des animaux un peu bizarres dans la ménagerie d’Oracle. Parfois, dans des conditions bien identifiés, un trigger peut se ré déclencher. Tant que l’action du trigger est transactionnelle, insert dans une table pour exemple, cella n’est pas grave, parce que Oracle ferra le ménage nécessaire via le rollback, avant de se re déclencher. Mais l’écriture dans un fichier n’est pas transactionnelle et donc, dans ce cas, il se peut qu’il y ait des doublons dans le fichier. Si vous pensez que cella n’est pas grave allez y.

    J’ai du mal à vous conseille avec seulement les informations que vous me donnez. Vous avez besoin de créer un fichier ASCII ça ne pose aucune problème. Mais la question est qu’est-ce que déclenche votre traitement ? Pour quoi voulez-vous faire ce traitement dans un trigger ?

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    C'est clair que le faire par trigger c'est la mauvaise solution.
    A chaque modif (insert/upd/del), il va falloir ouvrir le fichier, écrire les données, fermer le fichier... Ca va ramer.

    Si tu dois exporter des données en fichiers texte, utilise plutôt une procédure qui va récupérer toutes les données à prendre et créer ton fichier en une seule fois.

    Le problème c'est le DELETE que tu n'aura plus.
    Le mieux dans ce cas, est de logguer les modifs (ins,del,upd) dans une table spécifique.
    Table que tu vas lire pour retrouver les enreg modifiés de ta table principale pour ainsi créer ton fichier

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Parfois, dans des conditions bien identifiés, un trigger peut se ré déclencher.
    C'est surtout le cas pour les triggers before il me semble.
    Ce qui ne veut pas dire que j'encourage à bvincent à faire du non transactionnel dans un trigger, mais avec un trigger after c'est peut être moins grave.

    Pour ta problématique, es tu sûr d'avoir besoin de générer un fichier à chaque modification ?
    Une solution pourrait être d'utiliser un job oracle pour générer ton fichier toutes x minutes.

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

Discussions similaires

  1. probleme d'ecriture dans un fichier texte
    Par azrael88370 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/01/2005, 17h33
  2. Script shell - écriture dans un fichier
    Par Leishmaniose dans le forum Linux
    Réponses: 6
    Dernier message: 13/12/2004, 22h48
  3. Probleme d'ecriture dans un fichier en mode Text
    Par bbozet dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/01/2004, 13h46
  4. [LG]ecriture dans un fichier binaire
    Par jsaviola dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2003, 17h30
  5. Réponses: 2
    Dernier message: 26/09/2003, 14h51

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