ROLLBACK TO SAVEPOINT

Nome

ROLLBACK TO SAVEPOINT -- desfaz até o ponto de salvamento

Sinopse

ROLLBACK [ WORK | TRANSACTION ] TO [ SAVEPOINT ] nome_do_ponto_de_salvamento

Descrição

Desfaz todos os comandos que foram executados após o estabelecimento do ponto de salvamento. O ponto de salvamento permanece válido, sendo possível desfazer até este ponto de salvamento novamente se for necessário. [1] [2] [3]

O comando ROLLBACK TO SAVEPOINT destrói, implicitamente, todos os pontos de salvamento que foram estabelecidos após o ponto de salvamento especificado.

Parâmetros

nome_do_ponto_de_salvamento

O ponto de salvamento até onde será desfeito.

Observações

Para destruir um ponto de salvamento, sem rejeitar os efeitos dos comandos executados após este ponto de salvamento ter sido estabelecido, deve ser utilizado o comando RELEASE SAVEPOINT.

A especificação de um nome de ponto de salvamento que não tenha sido estabelecido anteriormente é um erro.

Os cursores possuem um comportamento um tanto não transacional com respeito aos pontos de salvamento. Os cursores abertos dentro de um ponto de salvamento não são fechados quando se desfaz até o ponto de salvamento. Se um cursor aberto anteriormente for afetado pelo comando FETCH dentro de um ponto de salvamento, e a transação for desfeita até o ponto de salvamento, a posição do cursor permanecerá apontando para onde o comando FETCH a deixou (ou seja, o comando FETCH não será desfeito). O fechamento do cursor também não é desfeito. Um cursor cuja execução tenha causado a interrupção da transação (abort) é colocado no estado de não poder executar e, portanto, embora a transação possa ser restaurada utilizando o comando ROLLBACK TO SAVEPOINT o cursor não poderá ser mais usado.

Exemplos

Para desfazer os efeitos dos comandos executados após o estabelecimento do meu_ponto_de_salvamento:

ROLLBACK TO SAVEPOINT meu_ponto_de_salvamento;

As posições dos cursores não são afetadas por desfazer até o ponto de salvamento:

BEGIN;

DECLARE foo CURSOR FOR SELECT 1 UNION SELECT 2;

SAVEPOINT foo;

FETCH 1 FROM foo;

 ?column?
----------
        1

ROLLBACK TO SAVEPOINT foo;

FETCH 1 FROM foo;

 ?column?
----------
        2

COMMIT;

Compatibilidade

O padrão SQL:2003 especifica que a palavra chave SAVEPOINT é obrigatória, mas o PostgreSQL e o Oracle permitem que seja omitida. O padrão SQL:2003 permite apenas WORK, e não TRANSACTION, como palavra sem efeito (noise word) após o ROLLBACK. Além disso, o padrão SQL:2003 possui a cláusula opcional AND [ NO ] CHAIN que não é suportada pelo PostgreSQL atualmente. Fora isto, este comando está em conformidade com o padrão SQL.

Consulte também

BEGIN, COMMIT, RELEASE SAVEPOINT, ROLLBACK, SAVEPOINT

Notas

[1]

Oracle — O comando ROLLBACK é utilizado para desfazer o trabalho realizado na transação corrente, ou para desfazer manualmente o trabalho realizado por uma transação distribuída duvidosa. A palavra chave WORK é opcional, sendo fornecida por compatibilidade com o padrão SQL. A cláusula TO SAVEPOINT especifica o ponto de salvamento até o qual se deseja desfazer a transação corrente. Se esta cláusula for omitida, então o comando ROLLBACK desfazerá toda a transação. A utilização do comando ROLLBACK com a cláusula TO SAVEPOINT realiza as seguintes operações: Desfaz apenas a parte da transação após o ponto de salvamento; Apaga todos os pontos de salvamento criados após este ponto de salvamento (o nome do ponto de salvamento é retido, portanto pode-se desfazer até o mesmo ponto de salvamento várias vezes. Os pontos de salvamento anteriores também são retidos); Libera todos os bloqueios em tabelas e linhas obtidos desde o ponto de salvamento (As outras transações que solicitaram acesso às linhas bloqueadas após o ponto de salvamento deverão continuar aguardando até que a transação seja efetivada ou desfeita. As outras transações que ainda não solicitaram requisição para as linhas poderão requisitar e acessar as linhas imediatamente). Oracle® Database SQL Reference 10g Release 1 (10.1) Part Number B10759-01 (N. do T.)

[2]

SQL Server — O comando ROLLBACK TRANSACTION desfaz uma transação explícita ou implícita até o início da transação, ou até um ponto de salvamento dentro da transação. O comando ROLLBACK TRANSACTION limpa todas as modificações nos dados realizadas a partir do início da transação ou a partir de um ponto de salvamento. Também libera os recursos mantidos pela transação. O comando ROLLBACK TRANSACTION sem nome do ponto de salvamento ou nome da transação desfaz até o início da transação. Quando se aninham transações, este comando desfaz todas as transações internas até o comando BEGIN TRANSACTION mais externo. Nos dois casos, o comando ROLLBACK TRANSACTION decrementa a função do sistema @@TRANCOUNT para 0. O comando ROLLBACK TRANSACTION até um ponto de salvamento não decrementa @@TRANCOUNT. O comando ROLLBACK TRANSACTION especificando um ponto de salvamento não libera nenhum bloqueio. SQL Server 2005 Books Online — ROLLBACK TRANSACTION (Transact-SQL) (N. do T.)

[3]

DB2 — O comando ROLLBACK é utilizado para desistir das alterações no banco de dados que foram feitas dentro da unidade de trabalho ou do ponto de salvamento. A cláusula TO SAVEPOINT especifica que deverá ser realizado um desfazimento parcial (ROLLBACK TO SAVEPOINT). Após o desfazimento bem-sucedido, o ponto de salvamento continuará a existir, mas todos os pontos de salvamento aninhados serão liberados e não existirão mais. Os pontos de salvamento aninhados, se existirem, serão considerados como se tivessem sido desfeitos e depois liberados como parte do desfazimento do ponto de salvamento corrente. Se não for fornecido o nome do ponto de salvamento, o desfazimento ocorrerá até o ponto de salvamento mais recente definido no nível de ponto de salvamento corrente. Se esta cláusula for omitida, o comando ROLLBACK desfazerá a transação inteiramente. Além disso, os pontos de salvamento dentro da transação serão liberados. DB2 Version 9 for Linux, UNIX, and Windows (N. do T.)

SourceForge.net Logo CSS válido!