A propos des instructions DML et des transactions

Les instructions LMD (Langage de manipulation de données) ajoutent, modifient et suppriment des données de table de base de données. Une transaction est une séquence d'une ou de plusieurs instructions SQL qu'Oracle AI Database traite comme une unité : soit toutes les instructions sont exécutées, soit aucune.

A propos des instructions de contrôle de transaction

Une transaction est une séquence d'une ou de plusieurs instructions SQL qu'Oracle AI Database traite comme une unité : soit toutes les instructions sont exécutées, soit aucune. Les transactions permettent de modéliser les processus métier qui requièrent plusieurs opérations exécutées en tant qu'une seule et même unité.

Par exemple, quand un responsable quitte l'entreprise, une ligne doit être insérée dans la table JOB_HISTORY pour notifier le départ du responsable et, pour chaque employé subordonné au responsable, la valeur de MANAGER_ID doit être mise à jour dans la table EMPLOYEES. Pour modéliser ce processus dans une application, vous devez regrouper les instructions INSERT et UPDATE dans une même transaction.

Les instruction de contrôle de transaction de base sont les suivantes :

Dans l'environnement SQL*Plus, vous pouvez saisir une instruction de contrôle de transaction après l'invite SQL>.

Dans l'environnement SQL Developer, vous pouvez entrer une instruction de contrôle de transaction dans la feuille de calcul. De plus, SQL Developer possède des icônes Valider les changements et Annuler les changements, dont le rôle est décrit aux sections "Validation des transactions" et "Annuler des transactions".

Attention :

Si vous ne validez pas explicitement une transaction et qu'elle se termine de façon anormale, la base de données annule automatiquement la dernière transaction non validée.

Oracle recommande de mettre fin explicitement aux transactions dans les programmes d'application en les validant ou en les annulant.

Voir aussi :

Validation de transactions

La validation d'une transaction rend permanentes les modifications que celle-ci a apportées, efface ses points de sauvegarde et libère ses verrous.

Pour valider explicitement une transaction, utilisez l'instruction COMMIT ou, dans l'environnement SQL Developer, l'icône Valider les modifications.

Remarque : Oracle AI Database émet une instruction COMMIT implicite avant et après toute instruction LDD (langage de définition de données). Pour plus d'informations sur les instructions LDD, reportez-vous à la section "A propos des instructions DLD (Data Definition Language)".

Avant de procéder à la validation d'une transaction :

Après avoir effectué la validation d'une transaction :

L'exemple 3-1 ajoute une ligne à la table REGIONS (une transaction très simple), vérifie le résultat, puis valide la transaction.

Exemple 3-1 Validation d'une transaction

Avant la transaction :

SELECT * FROM REGIONS
ORDER BY REGION_ID;

Résultats :

 REGION_ID REGION_NAME
---------- -------------------------
         1 Europe
         2 Americas
         3 Asia
         4 Middle East and Africa

4 rows selected.

Transaction (ajouter une ligne à une table) :

INSERT INTO regions (region_id, region_name) VALUES (5, 'Africa');

Résultats :

1 row created.

Vérification que la ligne a été ajoutée :

SELECT * FROM REGIONS
ORDER BY REGION_ID;

Résultats :

 REGION_ID REGION_NAME
---------- -------------------------
         1 Europe
         2 Americas
         3 Asia
         4 Middle East and Africa
         5 Africa

5 rows selected.

Validation de la transaction :

COMMIT;

Résultats :

Commit complete.

Voir aussi : Référence du langage SQL d'Oracle AI Database pour plus d'informations sur l'instruction COMMIT

Annulation des transactions

L'annulation d'une transaction annule les modifications lui ayant été apportées. Vous pouvez annuler la totalité de la transaction en cours ou l'annuler uniquement à un point de sauvegarde spécifié.

Pour annuler la transaction en cours uniquement à un point de sauvegarde spécifié, vous devez utiliser l'instruction ROLLBACK avec la clause TO SAVEPOINT.

Pour annuler la totalité de la transaction en cours, utilisez l'instruction ROLLBACK sans la clause TO SAVEPOINT ou (dans l'environnement SQL Developer) l'icône Annuler les modifications.

L'annulation de la totalité de la transaction en cours :

L'annulation de la transaction en cours uniquement au point de sauvegarde spécifié :

Pour voir l'effet d'une annulation dans SQL Developer, vous devez cliquer sur l'icône Régénérer.

Suite à l'exemple 3-1, la table REGIONS possède une région appelée "Moyen-Orient et Afrique" et une région appelée "Afrique". L'exemple 3-2 corrige ce problème (une transaction très simple) et vérifie la modification, puis annule la transaction et vérifie l'annulation.

Exemple 3-2 Annulation de l'ensemble d'une transaction

Avant la transaction :

SELECT * FROM REGIONS
ORDER BY REGION_ID;

Résultats :

 REGION_ID REGION_NAME
---------- -------------------------
         1 Europe
         2 Americas
         3 Asia
         4 Middle East and Africa
         5 Africa

5 rows selected.

Transaction (modifier la table) :

UPDATE REGIONS
SET REGION_NAME = 'Middle East'
WHERE REGION_NAME = 'Middle East and Africa';

Résultats :

1 row updated.

Vérification de la modification :

SELECT * FROM REGIONS
ORDER BY REGION_ID;

Résultats :

 REGION_ID REGION_NAME
---------- -------------------------
         1 Europe
         2 Americas
         3 Asia
         4 Middle East
         5 Africa

5 rows selected.

Annulation de la transaction :

ROLLBACK;

Résultats :

Rollback complete.

Vérification de l'annulation :

SELECT * FROM REGIONS
ORDER BY REGION_ID;

Résultats :

 REGION_ID REGION_NAME
---------- -------------------------
         1 Europe
         2 Americas
         3 Asia
         4 Middle East and Africa
         5 Africa

5 rows selected.

Voir aussi : Référence du langage SQL Oracle AI Database pour plus d'informations sur l'instruction ROLLBACK

Définition de points de sauvegarde dans des transactions

L'instruction SAVEPOINT marque un point de secours dans une transaction (le point à l'aide duquel vous pourrez ensuite procéder à l'annulation). Les points de sauvegarde sont facultatifs et il peut y en avoir plusieurs dans une même transaction. L'exemple 3-3 effectue une transaction qui comporte plusieurs instructions DML et plusieurs points de sauvegarde, puis annule la transaction jusqu'à un point d'enregistrement particulier, annulant uniquement les modifications réalisées après ce point d'enregistrement.

Exemple 3-3 Annulation d'une transaction jusqu'à un point de sauvegarde

Vérification de la table REGIONS avant la transaction :

SELECT * FROM REGIONS
ORDER BY REGION_ID;

Résultats :

 REGION_ID REGION_NAME
---------- -------------------------
         1 Europe
         2 Americas
         3 Asia
         4 Middle East and Africa
         5 Africa

5 rows selected.

Vérification des pays de la région 4 avant la transaction :

SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 4
ORDER BY COUNTRY_NAME;

Résultats :

COUNTRY_NAME                             CO  REGION_ID
---------------------------------------- -- ----------
Egypt                                    EG          4
Israel                                   IL          4
Kuwait                                   KW          4
Nigeria                                  NG          4
Zambia                                   ZM          4
Zimbabwe                                 ZW          4

6 rows selected.

Vérification des pays de la région 5 avant la transaction :

SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 5
ORDER BY COUNTRY_NAME;

Résultats :

no rows selected

Transaction comportant plusieurs points de sauvegarde :

UPDATE REGIONS
SET REGION_NAME = 'Middle East'
WHERE REGION_NAME = 'Middle East and Africa';

UPDATE COUNTRIES
  SET REGION_ID = 5
  WHERE COUNTRY_ID = 'ZM';
SAVEPOINT zambia;

UPDATE COUNTRIES
  SET REGION_ID = 5
  WHERE COUNTRY_ID = 'NG';
SAVEPOINT nigeria;

UPDATE COUNTRIES
  SET REGION_ID = 5
  WHERE COUNTRY_ID = 'ZW';
SAVEPOINT zimbabwe;

UPDATE COUNTRIES
  SET REGION_ID = 5
  WHERE COUNTRY_ID = 'EG';
SAVEPOINT egypt;

Vérification de la table REGIONS après la transaction :

SELECT * FROM REGIONS
ORDER BY REGION_ID;

Résultats :

 REGION_ID REGION_NAME
---------- -------------------------
         1 Europe
         2 Americas
         3 Asia
         4 Middle East
         5 Africa

5 rows selected.

Vérification des pays de la région 4 après la transaction :

SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 4
ORDER BY COUNTRY_NAME;

Résultats :

COUNTRY_NAME                             CO  REGION_ID
---------------------------------------- -- ----------
Israel                                   IL          4
Kuwait                                   KW          4

2 rows selected.

Vérification des pays de la région 5 après la transaction :

SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 5
ORDER BY COUNTRY_NAME;

Résultats :

COUNTRY_NAME                             CO  REGION_ID
---------------------------------------- -- ----------
Egypt                                    EG          5
Nigeria                                  NG          5
Zambia                                   ZM          5
Zimbabwe                                 ZW          5

4 rows selected.

ROLLBACK TO SAVEPOINT nigeria;

Vérification de la table REGIONS après l'annulation :

SELECT * FROM REGIONS
ORDER BY REGION_ID;

Résultats :

 REGION_ID REGION_NAME
---------- -------------------------
         1 Europe
         2 Americas
         3 Asia
         4 Middle East
         5 Africa

5 rows selected.

Vérification des pays de la région 4 après l'annulation :

SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 4
ORDER BY COUNTRY_NAME;

Résultats :

COUNTRY_NAME                             CO  REGION_ID
---------------------------------------- -- ----------
Egypt                                    EG          4
Israel                                   IL          4
Kuwait                                   KW          4
Zimbabwe                                 ZW          4

4 rows selected.

Vérification des pays de la région 5 après l'annulation :

SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 5
ORDER BY COUNTRY_NAME;

Résultats :

COUNTRY_NAME                             CO  REGION_ID
---------------------------------------- -- ----------
Nigeria                                  NG          5
Zambia                                   ZM          5

2 rows selected.

Voir aussi : Référence du langage SQL d'Oracle AI Database pour plus d'informations sur l'instruction SAVEPOINT