Llenguatge de Control de Transaccions (TCL)
Una transacció és el conjunt d’instruccions DML que s’executen consecutivament, i es pot anul·lar o acceptar el resultat de l’execució de totes elles, ja que una instrucció d’actualització no té validesa real fins que no s’accepta (COMMIT).
Exemple de trasacció:
Una transferència entre dos comptes bancaris ha d’incloure el dèbit a un compte corrent i el càrrec a un altre compte amb el mateix import.
Les dues accions s’han de realitzar correctament o incorrectament al mateix temps, de manera que el crèdit no es pot validar sense el dèbit.
Transacció
En el SGBDR Oracle, una transacció comença amb la primera instrucció DML de la seqüència i finalitza quan es produeix alguna d’aquestes situacions:
- Es troba una instrucció
COMMIToROLLBACK. - Es troba una instrucció DDL (com per exemple, un
ALTER TABLE). - Es troba una instrucció DCL (Data Control Language, com per exemple un
GRANT). - L'usuari abandona la sessió.
- Cau el sistema.
COMMIT i ROLLBACK
La instrucció COMMIT fa que els canvis realitzats per la transacció siguin definitius a la base de dades. L'estat anterior de les dades es perd per sempre (no es pot tornar enrere).
La instrucció ROLLBACK permet tornar a l’estat anterior de les dades a l’inici de la transacció. Anul·la definitivament els canvis en les dades, motiu pel qual cal estar molt segur d’executar aquesta operació.
Exemple
-- Inici de transacció implícit
INSERT INTO empl(empl_num, empl_nom, empl_dept_num)
VALUES(1000,’Pere’,10);
INSERT INTO empl(empl_num, empl_nom, empl_dept_num)
VALUES(2000,’Joan’,20);
COMMIT; -- Fi de transacció
-- Inici de transacció implícit
INSERT INTO empl(empl_num, empl_nom, empl_dept_num)
VALUES(3000,’Albert’,10);
INSERT INTO empl(empl_num, empl_nom, empl_dept_num)
VALUES(4000,’Manel’,40);
ROLLBACK; -- Fi de transacció
Consideracions amb Oracle
Si s’inicia una transacció utilitzant instruccions DML cal tenir en compte que:
- Les instruccions de consulta
SELECTrealitzades per l’usuari que ha iniciat la transacció mostren les dades ja modificades per les instruccions DML. - La resta d’usuaris veuen les dades tal com estaven abans de la transacció.
- Els registres afectats per la transacció apareixen bloquejats fins que la transacció no finalitza i la resta d'usuaris no podran modificar els valors d'aquests registres.
SAVEPOINT
Aquesta instrucció permet establir un punt de retorn dins una transacció.
Exemple
-- Inici de transacció implícit
INSERT INTO empl(empl_num, empl_nom, empl_dept_num)
VALUES(1000,’Pere’,10);
SAVEPOINT Pere;
INSERT INTO empl(empl_num, empl_nom, empl_dept_num)
VALUES(2000,’Joan’,20);
SAVEPOINT Joan;
INSERT INTO empl(empl_num, empl_nom, empl_dept_num)
VALUES(3000,’Albert’,10);
ROLLBACK TO Pere;
INSERT INTO empl(empl_num, empl_nom, empl_dept_num)
VALUES(4000,’Manel’,40);
COMMIT; -- Fi de transacció