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

PL/SQL Oracle Discussion :

Transaction et raise_application_error


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Développeur
    Inscrit en
    Janvier 2010
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Janvier 2010
    Messages : 232
    Par défaut Transaction et raise_application_error
    Bonjour,

    j'aimerais quelques explications sur les rollbacks implicites envoyés par le raise_application_error.

    J'ai d'abord remarqué que si, à l'intérieur d'une procédure le troisième ordre d'une màj (insert ou update ou delete) déclenchait une exception, il y avait un rollback implicite qui de fait, annulait les deux premiers ordres de màj.
    Ma question: ai-je tout bien compris ?

    En suite, j'ai écrit une procédure qui réalise deux insert dans une table sur laquelle existe un trigger before insert. J'ai fait en sorte que le trigger déclenche une exception sur le deuxième appel. Il se termine bien par un raise_application_error, l'erreur est remontée à la procédure appelante qui se déroute sur le bloc exception. J'ai juste fait un dbms_output.put_line, de sorte que la procédure se termine normalement. A ma grande surprise, je vois que le premier ordre inser n'a pas été impacté par le raise_application_error du trigger.
    Ma question est : est-ce que le trigger s'exécute dans une transaction autonome ?

    Merci pour vos réponses, je n'ai pas trouvé grand chose là dessus.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Par défaut
    Et la response est... Non.

    http://www.developpez.net/forums/d11...s/#post6431191
    Mais l'ensemble du sujet peut vous interesser.

  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
    Raise_application_Error n’est en rien différent de n’importe quelle autre exception. En fait quand une exception arrive l’exécution normale de la procédure est interrompue et le contrôle passe au gestionnaire de l’exception s’il y en a un. Si la procédure ne possède pas de gestionnaire d’exception l’exception remonte au niveau supérieur jusqu’au environnement appelant. L’atomicité de l’appel de la procédure fait que les modifications fait par cette procédure sont implicitement annulées quand la procédure échoue avec une exception non interceptée. Oracle enveloppe l’appel de la procédure par un savepoint qu’il utilise pour restaurer l’état de la base en cas d’échec de la procédure.
    Les triggers sont exécutés dans le cadre de la transaction que les déclenches en assurant l’atomicité de la transaction donc un aucun cas dans une transaction autonome.

  4. #4
    Membre éclairé
    Profil pro
    Développeur
    Inscrit en
    Janvier 2010
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Janvier 2010
    Messages : 232
    Par défaut
    Bonjour,

    Merci pour ces réponses pertinentes.
    Je me suis mal exprimé dans le cas d'un raise_application_error. j'(ai employé "transaction autonome" alors que je pensais bien que le trigger each row ne plantait QUE l'ordre qui l'avait déclenché.
    Par contre ce que je ne savais pas c'était que le procédure était considérée comme une unité de traitement ce qui fait qu'un raise_application_error annulait tous les ordres de la transaction qui avaient été effectués avant.

    On ne parle pas trop de tout ceci dans la littérature.
    Bonne fin de journée

  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
    Lisez aussi cette discussion

  6. #6
    Membre éclairé
    Profil pro
    Développeur
    Inscrit en
    Janvier 2010
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Janvier 2010
    Messages : 232
    Par défaut
    Merci pour toutes ces réponses. Je pense avoir compris.

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

Discussions similaires

  1. gestion d'erreur et de transactions....
    Par Dge dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 08/02/2006, 22h20
  2. Apropos des Transactions au sein d'un Stored Procedure
    Par Sarbacane dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 16/11/2004, 08h21
  3. [Petite requête] Nombre de transactions par jour
    Par Braim dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/04/2003, 10h53
  4. [PostgreSQL]transactions
    Par adri1 dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 10/04/2003, 14h37
  5. Transaction avec DoCmd.runsql ???
    Par Gandalf24 dans le forum VBA Access
    Réponses: 29
    Dernier message: 11/02/2003, 20h35

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