Aperçu des transactions autonomes

Nous avons vu 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.

PRAGMA AUTONOMOUS_TRANSACTION


L'application directe et la plus courante des transactions autonomes se situe au niveau de la journalisation utilisateur :

Soit une table LOG_ACTION composée des colonnes TIME_A et DESC_A, nous allons créer une procédure autonome permettant d'insérer dans cette table de manière indépendante :

create or replace procedure ecrit_log (message varchar2) is
PRAGMA AUTONOMOUS_TRANSACTION;
begin
insert into log_action (time_a, desc_a) values (sysdate, message);
commit;
end;
/


Ainsi lors de l'exécution d'un bloc anonyme par exemple, on pourra appeler indifféremment la procédure précédente que ce soit lors d'un rollback ou lors d'un commit, le reste de la procédure appelante restera cohérent :

begin
insert into commande (cmd_name, date_cmd) values ('première commande', sysdate);
begin
insert into client (nomClient) values ('acheteur');
commit;
ecrit_log('Client inséré');
exception
when DUP_VAL_ON_INDEX then
ecrit_log('Le client existe déjà');
rollback;
when others
ecrit_log('Erreur inconnue à l insertion');
rollback;
end;
end;
/




Vous n'avez pas trouver réponse à votre question ? Préciser votre recherche :

Catégories