2010-01-31 2 views
0

J'essayais de trouver un vrai problème de programmation qui pourrait être mieux résolu en utilisant des transactions autonomes dans des transactions autonomes, mais je ne pouvais pas en imaginer.Existe-t-il un cas d'utilisation pour les transactions autonomes imbriquées?

Pouvez-vous me donner des idées?

Edit:

Je veux dire quelque chose comme ceci:

PROCEDURE outer_procedure 
IS 
BEGIN 
    -- some code 
    auto_proc1; 
END; 
/

PROCEDURE auto_proc1 
IS PRAGMA AUTONOMOUS_TRANSACTION; 
BEGIN 
    -- some code 
    auto_proc2; 
END; 
/

PROCEDURE auto_proc2 
IS PRAGMA AUTONOMOUS_TRANSACTION; 
BEGIN 
    -- some code 
    NULL; 
END; 
/

Répondre

0

Il est peut être peu exagéré, mais je crois que cela est un cas relativement fréquent dans les scénarios d'intégration:

I J'avais une situation où j'avais besoin d'invoquer un programme tiers qui reposait sur des données validées dans la base de données, mais ma logique métier fonctionnant dans la transaction externe reposait sur le retour de ce programme tiers. Cela a nécessité que j'utilise une transaction imbriquée (autonome) pour les données requises par le programme tiers, et une transaction séparée pour les données incorporant le retour du programme tiers.

2

transactions autonomes peuvent être utiles pour des situations telles que:

  • Lorsque vous souhaitez enregistrer des informations sur une transaction dans une table, même si cette transaction échoue/est annulée. Si vous le faites sans transactions autonomes, la journalisation sera également annulée.

  • Si vous avez une transaction longue qui nécessite un verrou court sur une table qui est également utilisée par d'autres threads. Si vous le faites dans le cadre d'une transaction autonome, le verrouillage sera effectué rapidement, même si la transaction prend beaucoup de temps.

+0

Ces deux ne nécessitent pas d'utiliser plus d'un seul niveau de transactions autonomes. – jva

+0

Désolé, sans la clarification, je n'ai pas compris ce que vous vouliez dire. Je ne l'ai jamais utilisé dans la vie réelle, mais vous pouvez l'avoir dans l'exemple suivant: Une combinaison de ces 2: Vous avez besoin d'une transaction autonome (par exemple parce que vous ne voulez pas garder un verrou ouvert), mais vous voulez toujours consigner le résultat de cette transaction dans une table quel que soit le résultat (commit/rollback) de la transaction autonome principale. – Edwin

Questions connexes