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 :

Gestion des excceptions


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 92
    Par défaut Gestion des excceptions
    Bonjour,

    Je voudrais dans un de mes programmes pouvoir créer des dossiers clients
    même si des valeurs attendues sont erronnées et stockées dans une table intermédiaire toutes ces valeurs et dans le même temps je souhaiterais pouvoir annuler la création du dossier client si il manque pour ce client une donnée obligatoire...

    En bref je voudrais balayer tout mes dossiers clients , tracer les erreurs annuler et rejeter le dossier si incomplet ....

    Est ce quelqu'un peut m'aider...

    Je pensais pouvoir résoudre le problème avec une transaction autonome mais
    lorsque je trace les erreurs dans ma table de log je suis obligé de faire un rollback avant d'utiliser ma transaction autonome ... du coup je perd la création de mon dossier alors qu'il n'y a peut être que des valeurs erronées pour ce dossier ...

    Merci pour tout aide

    Delphine

  2. #2
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    Je ne vois pas trop le rapport avec le fait d'utiliser une transaction autonome.

    Si tu places toutes tes données dans une table de transit, qu'est-ce qui t'empeche de faire des requêtes de vérification ligne aprés ligne ?

  3. #3
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 92
    Par défaut
    En fait quand je crée mon dossier client je lui attribue différentes commandes et différents autres evenements... Ces données sont stockées dans des tables réelles ... Si les informations sont incomplètes alors le dossier client est rejeté entièrement (rollback des enregistrements dans les tables reelles) mais durant la création de ce dossier client toutes les données erronées ont été historisées afin de permettre de garder une trace des corrections à apporter à ce dossier en plus de la correction portant sur le rejet du dossier. Et ces données là si je fais un rollback global il me fait un rollback de la création du dossier mais aussi des données erronées historisées...En gros je dois "commiter" l'historique des données erronnées et "rollbacker" la création du dossier.

  4. #4
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 92
    Par défaut
    J'essayes de décomposer le problème pour etre plus claire ...

    J'ai pour un Dossier client 3 evenements à créer.

    Le premier evenement est traité : il manque quelques infos mais rien de bloquants.
    -- J'insere l'èvenement traité dans ma table d'evenement client (commande par exemple)
    -- donc j'insere les données manquantes mais non bloquantes dans ma table des anomalies et je continue mon traitement.
    Le deuxième evenement est créé : il manque quelques infos mais rien de bloquants la aussi.
    -- J'insere l'èvenement traité dans ma table d'evenement client (refus commande par exemple)
    -- donc j'insere les données manquantes mais non bloquantes dans ma table des anomalies et je continue mon traitement.
    Le troisième evenement est créé : il manque des informations bloquantes.
    -- Je rejette donc intégralement le dossier.. Rollback de tout mes évènements
    -- Par contre je commit ma table des anomalies

  5. #5
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Je ne suis pas trop sûr d'avoir tout compris, mais :
    - l'insertion de tous tes évènements doit se faire dans la même transaction
    - l'insertion de tes anomalies doit se faire dans une autre transaction.
    => via une procédure autonome.

    Le problème c'est qu'ainsi tu es obligée de committer à chaque anomalie insérée.

    exemple :
    - creation de la procedure autonome
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    create or replace procedure trace_anomalie is
    pragma autonomous_transaction;
    begin
    insert into anomalie ...
    commit;
    end;
    /
    - gestion de l'insertion des évènements :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    -- controle si tout est correctement renseigne pour le 1e evt
    ....
    if warning then 
      trace_anomalie;
    end if;
    if ok then
       insert into table 1...
    end if;
    -- controle si tout est correctement renseigne pour le 2e evt
    ....
    if warning then 
      trace_anomalie;
    end if;
    if ok then
       insert into table2...
    else 
      rollback;
    end if;
    -- controle si tout est correctement renseigne pour le 3e evt
    ....
    if warning then 
      trace_anomalie;
    end if;
    if ok then
       insert into table3...
    else 
      rollback;
    end if;
    Ainsi tes anomalies resteront, alors que les évènements seront rollbackés.

  6. #6
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 92
    Par défaut
    oui mais il me semble qu'avant de passer dans ma transaction autonome je suis obliger de faire un rollback ?? Donc du coup je perd l'insertion possible du dossier en cours ?

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Citation Envoyé par delphine_lep
    J'essayes de décomposer le problème pour etre plus claire ...

    J'ai pour un Dossier client 3 evenements à créer.

    Le premier evenement est traité : il manque quelques infos mais rien de bloquants.
    -- J'insere l'èvenement traité dans ma table d'evenement client (commande par exemple)
    -- donc j'insere les données manquantes mais non bloquantes dans ma table des anomalies et je continue mon traitement.
    Le deuxième evenement est créé : il manque quelques infos mais rien de bloquants la aussi.
    -- J'insere l'èvenement traité dans ma table d'evenement client (refus commande par exemple)
    -- donc j'insere les données manquantes mais non bloquantes dans ma table des anomalies et je continue mon traitement.
    Le troisième evenement est créé : il manque des informations bloquantes.
    -- Je rejette donc intégralement le dossier.. Rollback de tout mes évènements
    -- Par contre je commit ma table des anomalies

    et c'est pas possible d'insérer dans anomalie sans utiliser d'autonomous transaction ?

  8. #8
    Membre émérite Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Par défaut
    ben je suppose que non si on veut garder les anomalies et rollbacker totalement l'insertion des 3 événements...

    à moins de faire un tableau de tableAnomalies%RowType ...
    du coup, quand il y a anomalie 1 => au lieu de faire effectivement l'insert dans la table anomalie, on crée la ligne dans le tableau, idem pour les anomalies 2 et 3 et ...
    puis lorsqu'on tombe sur une erreur bloquante, on rollbak les insert dans les tables d'événements PUIS on insère dans la table d'anomalies le contenu du tableau et on commite CET insert !

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

Discussions similaires

  1. gestion des groupes
    Par muaddib dans le forum QuickReport
    Réponses: 3
    Dernier message: 31/12/2002, 11h01
  2. [reseaux] Gestion des threads en perl
    Par totox17 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 28/11/2002, 09h40
  3. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44
  4. Réponses: 4
    Dernier message: 04/07/2002, 12h31
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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