ComeçarComece de graça

Efeito do savepoint nos níveis de isolamento

Agora que você explorou savepoints, vamos usá-los para configurar uma série de transações que precisam trabalhar a partir do mesmo snapshot inicial dos dados. REPEATABLE READ é um nível de isolamento que permite dar a cada instrução dentro da transação os mesmos dados sobre os quais a primeira instrução operou, em vez dos dados resultantes da(s) instrução(ões) anterior(es).

Recentemente, o FFEIC permitiu um corte progressivo dos depósitos estrangeiros, campo RCON2203 em milhares, no conjunto de dados. O novo corte é de 35% para mais de US\( 1 bilhão, 25% para mais de US\) 500 milhões e 13% para mais de US$ 300 milhões. É possível ordenar essas instruções para evitar reduzir os dados mais de uma vez. No entanto, com REPEATABLE READ, as instruções veem os dados antes de quaisquer ajustes.

Este exercício faz parte do curso

Transações e Tratamento de Erros no PostgreSQL

Ver curso

Instruções do exercício

  • Inicie uma transação REPEATABLE READ.
  • Reduza RCON2203 em 35% se for mais de US\( 1 bilhão, em 25% se for mais de US\) 500 milhões ou em 13% se for mais de US$ 300 milhões, com um SAVEPOINT após cada etapa.
  • Encerre a transação.
  • Totalize o campo RCON2203.

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

-- Create a new transaction with a repeatable read isolation level
___ TRANSACTION ISOLATION LEVEL ___ ___;

-- Update records with a 35% reduction if greater than 1000000000
UPDATE ffiec_reci 
SET ___ = CAST(___ AS FLOAT) * .65 
WHERE CAST(RCON2203 AS FLOAT) > 1000000000;

___ million;

-- Update records with a 25% reduction if greater than 500000000
UPDATE ___ 
___ ___ = CAST(___ AS FLOAT) * .75 
___ CAST(RCON2203 AS FLOAT) ___ 500000000;

SAVEPOINT five_hundred;

-- Update records with a 13% reduction if greater than 300000000
___ ffiec_reci 
___ ___ = CAST(___ AS FLOAT) * .87 
___ CAST(___ AS FLOAT) ___ 300000000;

SAVEPOINT three_hundred;

-- Commit the transaction
___;

-- Select SUM the RCON2203 field
SELECT ___(CAST(RCON2203 AS FLOAT)) 
FROM ffiec_reci 
Editar e executar o código