Transaction autonome dans Oracle PL/SQL : validation, restauration
Que sont les instructions TCL en PL/SQL ?
TCL signifie Transaction Control Statements. Il enregistrera les transactions en attente ou annulera la transaction en attente. Ces instructions jouent un rôle essentiel car à moins que la transaction ne soit enregistrée, les modifications via les instructions DML ne seront pas enregistrées dans la base de données. Vous trouverez ci-dessous les différentes déclarations TCL.
COMMETTRE | Enregistre toutes les transactions en attente |
RETOUR EN ARRIERE | Supprimer toutes les transactions en attente |
POINT DE SAUVEGARDE | Crée un point dans la transaction jusqu'à lequel la restauration peut être effectuée plus tard |
RETOUR À | Supprimez toutes les transactions en attente jusqu'à l'heure spécifiée |
La transaction sera complétée dans les scénarios suivants.
- Lorsque l'une des déclarations ci-dessus est émise (sauf SAVEPOINT)
- Lorsque les instructions DDL sont émises. (DDL sont des instructions de validation automatique)
- QUAND les relevés DCL sont émis. (DCL sont des instructions de validation automatique)
Qu'est-ce que la transaction autonome
En PL/SQL, toutes les modifications apportées aux données seront qualifiées de transaction. Une transaction est considérée comme terminée lorsque la sauvegarde/rejet lui est appliquée. Si aucune sauvegarde/rejet n'est effectuée, alors la transaction ne sera pas considérée comme terminée et les modifications apportées aux données ne seront pas rendues permanentes sur le serveur.
Indépendamment de certaines modifications apportées au cours d'une séance, PL / SQL traitera l'ensemble de la modification comme une seule transaction et enregistrera/abandonnera cette transaction affecte l'ensemble des modifications en attente dans cette session. La transaction autonome fournit une fonctionnalité au développeur dans laquelle elle permet d'effectuer des modifications dans une transaction distincte et de sauvegarder/supprimer cette transaction particulière sans affecter la transaction de session principale.
- Cette transaction autonome peut être spécifiée au niveau du sous-programme.
- Pour faire fonctionner n'importe quel sous-programme dans une transaction différente, le mot-clé 'PRAGMA AUTONOMOUS_TRANSATION' doit être donné dans la section déclarative de ce bloc.
- Il demandera au compilateur de traiter cela comme une transaction distincte et la sauvegarde/la suppression à l'intérieur de ce bloc ne se reflétera pas dans la transaction principale.
- L'émission de COMMIT ou ROLLBACK est obligatoire avant de passer de cette transaction autonome à la transaction principale car à tout moment une seule transaction peut être active.
- Ainsi, une fois que nous avons effectué une transaction autonome, nous devons la sauvegarder et terminer la transaction. Nous pouvons alors revenir à la transaction principale.
syntaxe:
DECLARE PRAGMA AUTONOMOUS_TRANSACTION; . BEGIN <executin_part> [COMMIT|ROLLBACK] END; /
- Dans la syntaxe ci-dessus, le bloc a été réalisé comme une transaction autonome.
Exemple 1: Dans cet exemple, nous allons comprendre comment fonctionne la transaction autonome.
DECLARE l_salary NUMBER; PROCEDURE nested_block IS PRAGMA autonomous_transaction; BEGIN UPDATE emp SET salary = salary + 15000 WHERE emp_no = 1002; COMMIT; END; BEGIN SELECT salary INTO l_salary FROM emp WHERE emp_no = 1001; dbms_output.put_line('Before Salary of 1001 is'|| l_salary); SELECT salary INTO l_salary FROM emp WHERE emp_no = 1002; dbms_output.put_line('Before Salary of 1002 is'|| l_salary); UPDATE emp SET salary = salary + 5000 WHERE emp_no = 1001; nested_block; ROLLBACK; SELECT salary INTO l_salary FROM emp WHERE emp_no = 1001; dbms_output.put_line('After Salary of 1001 is'|| l_salary); SELECT salary INTO l_salary FROM emp WHERE emp_no = 1002; dbms_output.put_line('After Salary of 1002 is '|| l_salary); end;
Sortie
Before:Salary of 1001 is 15000 Before:Salary of 1002 is 10000 After:Salary of 1001 is 15000 After:Salary of 1002 is 25000
Explication du code :
- Ligne de code 2: Déclarer l_salary comme NUMBER.
- Ligne de code 3 : Déclaration de la procédure nested_block
- Ligne de code 4: Création de la procédure nested_block comme 'AUTONOMOUS_TRANSACTION'.
- Ligne de code 7 à 9 : Augmentation de 1002 15000 du salaire de l'employé numéro .
- Ligne de code 10 : Validation de la transaction.
- Ligne de code 13 à 16 : Impression des détails du salaire des employés 1001 et 1002 avant modifications.
- Ligne de code 17 à 19 : Augmentation de 1001 5000 du salaire de l'employé numéro .
- Ligne de code 20 : Appel de la procédure nested_block ;
- Ligne de code 21 : Abandonner la transaction principale.
- Ligne de code 22 à 25 : Impression des détails du salaire des employés 1001 et 1002 après modifications.
- L'augmentation de salaire de l'employé numéro 1001 n'est pas reflétée car la transaction principale a été rejetée. L'augmentation de salaire pour l'employé numéro 1002 est reflétée car ce blocage a été effectué en tant que transaction distincte et enregistré à la fin.
- Ainsi, quelle que soit la sauvegarde/l'abandon lors de la transaction principale, les modifications apportées à la transaction autonome ont été enregistrées sans affecter les modifications principales de la transaction.