mercredi 22 mai 2013

Apercu des transactions autonomes (PRAGMA AUTONOMOUS_TRANSACTION).

On sait qu'une des règles fondamentales d'un SGBD est d'apporter une cohérence complète lors de transactions (atomicité de la transaction) ; cependant, il arrive que certaines transactions doivent être exécutées indépendamment de celle qui l'appelle. C'est ce qu'on nomme les transactions autonomes.

Oracle a mis en place un mécanisme permettant cette exception : la clause PRAGMA AUTONOMOUS_TRANSACTION. Cette clause se place à la déclaration de la procédure / fonction / trigger et précise ainsi que celle-ci sera autonome.

Ainsi, le commit et le rollback à l'intérieur de la transaction autonome n'auront aucun effet sur les procédures appelantes.
La meilleure façon de comprendre les transactions autonomes est de les voir en action (exemple détaillé). Pour ce faire,on va créer une table TEST et de la remplir avec deux rangées sans faire le commit;












SQL> insert into test values (1,' Ceci est un test numéro 1 ');
 1 row inserted

SQL> insert into test values (2,' Ceci est un test numéro 2 ');
 1 row inserted


SQL> select * from test;

        ID DESCRIPTION
---------- --------------------------------------------------
         1  Ceci est un test numéro 1
         2  Ceci est un test numéro 2
Maintenant, on va insérer des enregistrements dans cette table en utilisant la clause PRAGMA AUTONOMOUS_TRANSACTION avec un commit à la fin (bloc PLSQL avec la boucle FOR..IN).














SQL> select * from test;

        ID DESCRIPTION
---------- --------------------------------------------------
         1  Ceci est un test numéro 1
         2  Ceci est un test numéro 2
         3 Ceci est un test numéro 3
         4 Ceci est un test numéro 4
         5 Ceci est un test numéro 5
         6 Ceci est un test numéro 6
         7 Ceci est un test numéro 7
         8 Ceci est un test numéro 8
         9 Ceci est un test numéro 9
        10 Ceci est un test numéro 10
        11 Ceci est un test numéro 11
        12 Ceci est un test numéro 12
        13 Ceci est un test numéro 13
        14 Ceci est un test numéro 14
        15 Ceci est un test numéro 15

15 rows selected

On essaye maintenant de faire un ROLLBACK.
SQL> rollback;

Rollback complete

SQL> select * from test;

        ID DESCRIPTION
---------- --------------------------------------------------
         3 Ceci est un test numéro 3
         4 Ceci est un test numéro 4
         5 Ceci est un test numéro 5
         6 Ceci est un test numéro 6
         7 Ceci est un test numéro 7
         8 Ceci est un test numéro 8
         9 Ceci est un test numéro 9
        10 Ceci est un test numéro 10
        11 Ceci est un test numéro 11
        12 Ceci est un test numéro 12
        13 Ceci est un test numéro 13
        14 Ceci est un test numéro 14
        15 Ceci est un test numéro 15

13 rows selected

On constate que les deux lignes insérées dans la session en cours ont été annulées, tandis que les lignes insérées dans les transactions restent autonomes. La présence de la clause AUTONOMOUS_TRANSACTION a fait le bloc anonyme exécuter dans sa propre transaction, de sorte que la validation par un commit n'a aucun effet sur la session. Si on avait pas cette clause, on aurait dû voir toutes les rangées. 

On réinsère les deux lignes qui ont été annulées:
SQL> insert into test values (1,' Ceci est un test numéro 1 ');
1 row inserted

SQL> insert into test values (2,' Ceci est un test numéro 2 ');
1 row inserted

On va refaire un select sur la table, ça nous donne 15 rangées:
SQL> select * from test;

        ID DESCRIPTION
---------- --------------------------------------------------
         1  Ceci est un test numéro 1
         2  Ceci est un test numéro 2
         3 Ceci est un test numéro 3
         4 Ceci est un test numéro 4
         5 Ceci est un test numéro 5
         6 Ceci est un test numéro 6
         7 Ceci est un test numéro 7
         8 Ceci est un test numéro 8
         9 Ceci est un test numéro 9
        10 Ceci est un test numéro 10
        11 Ceci est un test numéro 11
        12 Ceci est un test numéro 12
        13 Ceci est un test numéro 13
        14 Ceci est un test numéro 14
        15 Ceci est un test numéro 15

15 rows selected
 
 On va mettre un commentaire sur la clause PRAGMA AUTONOMOUS_TRANSACTION:













Si on fait maintenant un select, ça nous donne 30 rangées.
30 rows selected

On fait un ROLLBACK:
SQL> rollback;
Rollback complete

SQL> select count(*) from test;

  COUNT(*)
----------
        30
Donc, contrairement à la spécification de la clause PRAGMA AUTONOMOUS_TRANSACTION, les données ont été validées. C'est ça le mécanisme de cette clause.

1 commentaire:

  1. HERBAL CURE POUR LES BARDEAUX, LES VERRUES ET LES HERPES, Hv / Aids Il y a 5 ans, j'avais des verrues, j'ai été traité avec un liquide appliqué sur les verrues qu'elles continuaient de croître et de se propager ... Les 2 médecins suivants ont fait une chirurgie au laser pour les enlever. Un an après la chirurgie, ils ont repoussé près de l'endroit où se trouvaient les premiers '', alors on m'a finalement dit que c'était SHINGLES. Je l'ai depuis très longtemps, je l'ai contracté avec mon petit ami trompé et j'ai découvert qu'il était également infecté et j'ai mis fin à la relation entre nous. Les verrues étaient tellement gênantes parce qu'elles ont commencé à se répandre partout. Je m'occupe de ces choses depuis très longtemps. Le dernier traitement que j'ai pris remonte à environ 2 ans, j'ai demandé un traitement naturel à la cure d'herbes du Dr JAMES, une semaine après l'application du traitement, toutes les verrues avaient disparu. Cela fait maintenant 2 ans et quelques mois, je n'ai pas une seule verrue ni aucun symptôme de SHINGLES. wow "" c'est super, le Dr JAMES m'a enfin guéri. Toute personne vivant avec SHINGLES communique avec le Dr JAMES pour des traitements naturels. Sa phytothérapie est facile à boire et sans effets secondaires. Le Dr James a un traitement pour des maladies telles que la maladie de Parkinson, la schizophrénie, le cancer du poumon, le cancer du sein, le cancer colo-rectal, le cancer du sang, le cancer de la prostate, l'épilepsie, la maladie de Dupuytren, la maladie cœliaque, la maladie de Creutzfeldt-Jakob, l'angiopathie amyloïde cérébrale, l'ataxie, l'arthrite, Sclérose latérale amyotrophique, fibromyalgie, toxicité de la fluoroquinolone
    Syndrome Fibrodysplasia Ossificans ProgresS Sclérose, Convulsions, Maladie d'Alzheimer, Carcinome adrénocortical.Asthme, Maladies allergiques, Copd, Glaucome., Cataractes, Dégénérescence maculaire, Maladie cardiovasculaire, Maladie pulmonaire, Prostate élargie, Ostéoporose, Sclérose en plaques, Insuffisance cardiaque, Cushing , Hypertension, maladie de Lyme, cancer du sang, cancer du cerveau, cancer du sein, cancer du poumon, cancer du rein, VIH / SIDA, virus de l'herpès, hépatite B, inflammation du foie, diabète, fibrome. Contactez le Dr Jmaes qui m'a guéri sur son e-mail [drjamesherbalmix@gmail.com]. .

    RépondreSupprimer