Definindo Pontos de Salvamento em Transações
A instrução SAVEPOINT marca um ponto de salvação em uma transação, um ponto para o qual é possível fazer rollback posteriormente. Os pontos de salvamento são opcionais e uma transação pode ter vários deles. O exemplo 3-9 faz uma transação que inclui várias instruções DML e vários pontos para salvar e, em seguida, faz rollback da transação para um ponto para salvar, desfazendo apenas as alterações feitas após esse ponto.
Exemplo 3-9 Fazendo Rollback de uma Transação para um Savepoint
Verifique a tabela REGIONS antes de efetuar a transação:
SELECT * FROM REGIONS
ORDER BY REGION_ID;
Resultado:
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
5 Africa
5 rows selected.
Verifique os países na região 4 antes da transação:
SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 4
ORDER BY COUNTRY_NAME;
Resultado:
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.
Verifique os países na região 5 antes da transação:
SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 5
ORDER BY COUNTRY_NAME;
Resultado:
no rows selected
Transação, com vários pontos de salvamento:
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;
Verifique a tabela REGIONS após a transação:
SELECT * FROM REGIONS
ORDER BY REGION_ID;
Resultado:
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East
5 Africa
5 rows selected.
Verifique os países na região 4 depois da transação:
SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 4
ORDER BY COUNTRY_NAME;
Resultado:
COUNTRY_NAME CO REGION_ID
---------------------------------------- -- ----------
Israel IL 4
Kuwait KW 4
2 rows selected.
Verifique os países na região 5 depois da transação:
SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 5
ORDER BY COUNTRY_NAME;
Resultado:
COUNTRY_NAME CO REGION_ID
---------------------------------------- -- ----------
Egypt EG 5
Nigeria NG 5
Zambia ZM 5
Zimbabwe ZW 5
4 rows selected.
ROLLBACK TO SAVEPOINT nigeria;
Verifique a tabela REGIONS após o rollback:
SELECT * FROM REGIONS
ORDER BY REGION_ID;
Resultado:
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East
5 Africa
5 rows selected.
Verifique os países na região 4 depois do rollback:
SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 4
ORDER BY COUNTRY_NAME;
Resultado:
COUNTRY_NAME CO REGION_ID
---------------------------------------- -- ----------
Egypt EG 4
Israel IL 4
Kuwait KW 4
Zimbabwe ZW 4
4 rows selected.
Verifique os países na região 5 depois do rollback:
SELECT COUNTRY_NAME, COUNTRY_ID, REGION_ID
FROM COUNTRIES
WHERE REGION_ID = 5
ORDER BY COUNTRY_NAME;
Resultado:
COUNTRY_NAME CO REGION_ID
---------------------------------------- -- ----------
Nigeria NG 5
Zambia ZM 5
2 rows selected.
Consulte Também: Referência de Linguagem SQL do Oracle Database para obter informações sobre a instrução SAVEPOINT