0% ont trouvé ce document utile (0 vote)
52 vues34 pages

PL/SQL : Transactions et Curseurs Oracle

Le document traite des transactions et des curseurs en PL/SQL pour Oracle, en abordant des concepts tels que l'atomicité, la consistance, l'isolation et la durabilité des transactions. Il fournit également des exemples pratiques d'utilisation des commandes INSERT, UPDATE, DELETE, ainsi que des instructions sur la gestion des erreurs, des exceptions et des savepoints. Enfin, il inclut des travaux pratiques pour illustrer l'application des concepts discutés.

Transféré par

Àymanĕ Ła Tracë
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
52 vues34 pages

PL/SQL : Transactions et Curseurs Oracle

Le document traite des transactions et des curseurs en PL/SQL pour Oracle, en abordant des concepts tels que l'atomicité, la consistance, l'isolation et la durabilité des transactions. Il fournit également des exemples pratiques d'utilisation des commandes INSERT, UPDATE, DELETE, ainsi que des instructions sur la gestion des erreurs, des exceptions et des savepoints. Enfin, il inclut des travaux pratiques pour illustrer l'application des concepts discutés.

Transféré par

Àymanĕ Ła Tracë
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

PL/SQL FOR ORACLE

Transactions & Curseurs

•Equipe pédagogique
•Prof. Ikram GHAZAL
•Prof. Mahmoud NASSAR
•Prof. Mohammed SALIHOUN
•Prof. Maria EL HAIBA

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES

SOMMAIRE GENERAL

MOTIVATIONS
STRUCTURE D’UN BLOC PL/SQL
LES VARIABLES
LES ENREGISTREMENTS
ASSIGNATION DES VARIABLES ET AFFECTATION
STRUCTURES DE CONTRÔLE
LES COLLECTIONS
LES TRANSACTIONS
INSERT-UPDATE-DELETE DANS UN BLOC PL/SQL
GESTION DES ERREURS ET DES EXCEPTIONS
LES CURSEURS
LES PROCEDURES ET LES FOCNTIONS STOCKEES
LES PACKAGES
LES TRIGGERS

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES

INSERT, UPDATE, DELETE


DANS UNE BD

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES

TRANSACTION

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES

PROBLEME:

TRAITEMENT
BD BD

temps
T0 T1

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
PROBLEME:

TRAITEMENT
BD BD
UNITE SEMANTIQUE

ETAT COHERENT ETAT COHERENT

temps
T0 T1
Exemple: Transfert d'argent entre 2 comptes:
UPDATE Compte
SETVal = Val -100
Where NumCompte=1;

UPDATE Compte
SETVal = Val + 100
Where NumCompte=2;
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES

Transaction: définition
Une transaction est une séquence d’actions <a11, a12, ..., a1ni>

Exemple:
Début de la transaction
DEBUT TRANSACTION
INSERT INTO compte_1 (…) VALUES (…);
INSERT INTO compte_2 (…) VALUES (…);
DELETE FROM comptabilité WHERE num=123;
UPDATE …….
FIN TRANSACTION ;
Fin de la transaction

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES

Transaction: Propriétés

Atomicité
Consistance
Isolation
Durabilité

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES

Transaction: Propriétés

Atomicité
L'ensemble des opérations d'une transaction apparaît comme une seule
opération atomique

Soit toutes les opérations sont validées ou toutes annulées (tout ou rien)

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES

Transaction: Propriétés

Consistance
L'exécution de la transaction fait passer la base de données d'un état
consistant à un autre état consistant

BD TRANSACTION BD

ETAT COHERENT ETAT COHERENT

temps
T0 T1

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES

Transaction: Propriétés

Isolation
Chaque transaction est indépendante des autres transactions concurrentes.

Sérialisation des transactions.

Les résultats d'une transaction ne sont visibles aux autres transactions


qu'une fois la transaction validée.

Les concurrences sont parfaitement contrôlées

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES

Transaction: Propriétés

Durabilité
C'est la persistance des mises à jour d'une transaction validée.

Les effets d'une transaction validée sont durables et permanents, quelques


soient les problèmes logiciels ou matériels, notamment après la fin de la
transaction.

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES

Transaction: primitives de gestion


BEGIN TRANSACTION
SET TRANSACTION
OUVERTURE DE
SESSION

DEBUT_DE_TRANSACTION

INSERT INTO compte_1 (…) VALUES (…);


……
INSERT INTO compte_2 (…) VALUES (…);
………..
DELETE FROM comptabilité WHERE num=123; COMMIT
………….. - Validation de la
FIN_DE_TRANSACTION ; transaction
- Rend effectives toutes
ROLBACK, ABORT les mises à jour de la
transaction
- Annulation de la
transaction
- Défait toutes les
mises à jour de la
ORACLE transaction PL/SQL
BASES DE DONNEES RELATIONNELLES

COMMIT
Etat cohérent Etat cohérent
de la BD de la BD

ROLLBACK

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES

TRANSACTION
SOUS
ORACLE

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
SET TRANSACTION READ [ONLY | WRITE]
INSERT INTO compte_1 (…) VALUES (…);
INSERT INTO compte_2 (…) VALUES (…);
SAVEPOINT <NOM>
DELETE FROM comptabilité WHERE num=123;
UPDATE …….
SAVEPOINT <NOM>
DELETE FROM
[COMMIT | ROLLBACK] ;

Une transaction commence soit à la connexion ou en début de session, soit à la fin d'une
transaction précédente annulée ou validée.

Le début d’une transaction dans Oracle peut être IMPLICITE (pas besoin de SET
TRANSACTION ….)
COMMIT VALIDE entièrement la transaction

ROLLBACK ANNULE entièrement la transaction

Les savepoint sont des points de contrôle utilisés dans les transactions pour annuler partiellement l’une
d’elles.
Il est possible de définir des Savepoint qui sont des points de contrôle utilisés dans une transaction ainsi
on a la possibilité de faire des annulations partielles de transaction.
ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
EXEMPLE 1 : COMMIT et ROOLLBACK

SQL> create table trans (


2 id number(5) primary key,
3 nom varchar2(20)
4 );

Table créée.

SQL>
SQL>
SQL> desc trans;
Nom NULL ? Type
----------------------------------------- -------- ----------------------------
ID NOT NULL NUMBER(5)
NOM VARCHAR2(20)

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES

SQL> --transaction implicite dans oracle


SQL> insert into trans values (1, ‘Rachid');

1 ligne créée.

SQL>
SQL>
SQL> select * from trans;

ID NOM
---------- --------------------
1 Rachid

SQL>
SQL>
SQL> rollback;

Annulation (rollback) effectuée.

SQL>
SQL> select * from trans;

aucune ligne sélectionnée

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES

SQL>
SQL> insert into trans values (1, ‘Rachid');

1 ligne créée.

SQL> commit;

Validation effectuée.

SQL>
SQL>
SQL> select * from trans;

ID NOM
---------- --------------------
1 Rachid

SQL>

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES

SQL> set transaction read only;

Transaction définie.

SQL>
SQL>
SQL> --test d'insertion
SQL>
SQL> insert into trans values (4, ‘Said');
insert into trans values (4, ‘Said')
*
ERREUR à la ligne 1 :
ORA-01456: impossible d'exécuter l'opération insérer/supprimer/modifier dans
une transaction READ ONLY

SQL>
SQL> update trans set nom=‘Filali’ where id=1;
update trans set nom=‘Filali' where id=1
*
ERREUR à la ligne 1 :
ORA-01456: impossible d'exécuter l'opération insérer/supprimer/modifier dans
une transaction READ ONLY

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES

SQL> set transaction read write;

Transaction définie.

SQL>
SQL> select * from trans;

ID NOM
---------- --------------------
1 Rachid

SQL> update trans set nom=‘Mohmmed' where id=1;

1 ligne mise à jour.

SQL> commit;

Validation effectuée.

SQL> select * from trans;

ID NOM
---------- --------------------
1 Mohammed

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
EXEMPLE 2 : SAVEPOINT et ROLLBACK TO
SQL> --test savepoint
SQL>
SQL> select * from trans;

aucune ligne sélectionnée

SQL>
SQL> insert into trans values (1, ‘Rachid');

1 ligne créée.

SQL>
SQL> select * from trans;

ID NOM
---------- --------------------
1 Rachid

SQL>
SQL> savepoint P1;

Savepoint créé.

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES

SQL>
SQL> insert into trans values (2, ‘Said');

1 ligne créée.

SQL>
SQL> select * from trans;

ID NOM
---------- --------------------
1 Rachid
2 Said

SQL>
SQL> savepoint P2;

Savepoint créé.

SQL>

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES

SQL>
SQL> insert into trans values (3, ‘Mohammed');

1 ligne créée.

SQL>
SQL> select * from trans;

ID NOM
---------- --------------------
1 Rachid
2 Said
3 Mohammed

SQL>
SQL> savepoint P3;

Savepoint créé.

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
SQL>
SQL> rollback to P3;

Annulation (rollback) effectuée.

SQL>
SQL> select * from trans;

ID NOM
---------- --------------------
1 Rachid
2 Said
3 Mohammed

SQL> rollback to P2;

Annulation (rollback) effectuée.

SQL>
SQL> select * from trans;

ID NOM
---------- --------------------
1 Rachid
2 Said

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES

SQL> rollback to P1;

Annulation (rollback) effectuée.

SQL>
SQL> select * from trans;

ID NOM
---------- --------------------
1 Rachid

SQL> rollback;

Annulation (rollback) effectuée.

SQL>
SQL>
SQL> select * from trans;

aucune ligne sélectionnée

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
EXEMPLE 3 : SAVEPOINT et ROLLBACK GLOBAL
SQL> --test savepoint et rollback et commit;
SQL> insert into trans values (1, ‘Rachid');
1 ligne créée.

SQL> savepoint P1;


Savepoint créé.

SQL> insert into trans values (2, ‘Said');


1 ligne créée.

SQL> savepoint P2;


Savepoint créé.

SQL> select * from trans;

ID NOM
---------- --------------------
1 Rachid
2 Said

SQL> rollback;
Annulation (rollback) effectuée.

SQL> select * from trans;


aucune ligne sélectionnée

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
EXEMPLE 4 : SAVEPOINT et COMMIT GLOBAL
SQL> insert into trans values (1, ‘Rachid');
1 ligne créée.

SQL> savepoint P1;


Savepoint créé.

SQL> insert into trans values (2, ‘Said');


1 ligne créée.

SQL> savepoint P2;


Savepoint créé.

SQL> insert into trans values (3, ‘Mohammed');


1 ligne créée.

SQL> commit;
Validation effectuée.

SQL> select * from trans;

ID NOM
---------- --------------------
1 Rachid
2 Said
3 Mohammed

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES

TRAVAUX
PRATIQUES

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES

Partie 1: Transaction et ordre CREATE TABLE ET DROP TABLE

Pour réaliser cette première partie du TP vous devez avoir deux sessions différentes ouvertes sur la
même base (connectez vous avec deux SQLPLUS avec le même compte)

1. créer la table "transa" comme présenté ci-aprés.


CREATE TABLE transa (
ID NUMBER(5) PRIMARY KEY,
NOM VARCHAR2(20)
);

2. Considérons les ordres CREATE et DROP. La création et la suppression d'une table sont-elles
transactionnelles ?
Pour vérifier cela, avec vos deux connexions, tentez de créer la table "transa" dans une transaction, et de
vérifier dans l'autre session si vous la voyez .

3. Que constatez-vous ?

4. Exécutez la même tentative avec un DROP.

5. Conclusion ?

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
Partie 2 : atomicité d’une transaction courante
6. Insérez trois ou quatre lignes dans la table transa et les voir,;
7. Modifiez une ligne, en supprimer une autre, enfin annuler les mises à jour venant d’être effectuées (en
écrivant « ROLLBACK ; »).
8. Vérifier le contenu de le contenu de la table et sa structure.
9. Conclusion?
10. Insérer à nouveau trois ou quatre lignes, les modifier et les détruire partiellement, puis valider (en
écrivant « COMMIT ; ») ces mises à jour,
11. Faites maintenant un ROLLBACK. Que s’est-il passé ?
12. Maintenant détruire les données de votre table et valider.
13. Insérer à nouveau dans votre table vide trois ou quatre lignes et clore la transaction par un EXIT .
14. Reconnectez vous à SQLPLUS. Que s’est-il passé ? Expliquez
15. Dans votre table, insérez à nouveau deux ou trois lignes dans la table et fermez brutalement votre
session.
16. Reconnectez vous à SQLPLUS. Les données saisies ont-elles été préservées ? Expliquez!
17. Insérer à nouveau deux ou trois lignes dans la table, puis ajouter une nouvelle colonne à la table et
essayer d’annuler les dernières insertions puis faites un DESC de la table. Conclusion.
18. Videz votre table par un delete.

ORACLE PL/SQL
BASES DE DONNEES RELATIONNELLES
Partie 2 : atomicité d’une transaction courante
19. Insérez trois ou quatre lignes dans la table transa et les voir,;
20. Insérez deux ou trois lignes puis faites une sauvegarde partielle de la transaction (SAVEPOINT)
21. Insérez deux ou trois lignes puis faites une sauvegarde partielle de la transaction (SAVEPOINT)
22. Faites un ROLLBACK puis vérifiez le contenu votre table. Conclusion?
23. Insérez deux ou trois lignes puis faites une sauvegarde partielle de la transaction (SAVEPOINT)
24. Insérez deux ou trois lignes puis faites une sauvegarde partielle de la transaction (SAVEPOINT)
25. Faites un COMMIT puis vérifiez le contenu votre table. Conclusion?
26. Videz votre table par un delete.
27. Insérez deux ou trois lignes puis faites une sauvegarde partielle de la transaction (SAVEPOINT)
28. Insérez deux ou trois lignes puis faites une sauvegarde partielle de la transaction (SAVEPOINT)
29. Faites une annulation partielle de la transaction (ROLLBACK TO …)
30. Vérifier le contenu de la table par un SELECT.
31. Faites un COMMIT. Et vérifiez le contenu de la table. Conclusion?

Partie 3 : transaction et ordre DDL


32. Videz votre table par un delete.
33. Insérez deux ou trois lignes.
34. Faites un ALTER TABLE (par exemple, modification du schéma logique en général).
35. Faites un DESC de la table
36. Vérifiez le contenu de la table. Que constatez-vous? Conclusion??

ORACLE PL/SQL

Vous aimerez peut-être aussi