НачатьНачать бесплатно

Влияние точки сохранения на уровни изоляции

Теперь, когда вы познакомились с точками сохранения, воспользуемся ими для настройки серии транзакций, которым необходимо работать с одним и тем же начальным снимком данных. REPEATABLE READ — это уровень изоляции, при котором каждый оператор внутри транзакции получает те же данные, что и первый оператор, а не данные, изменённые предыдущими операторами.

Недавно FFEIC разрешила поэтапное сокращение иностранных депозитов: поле RCON2203 в наборе данных содержит значения в тысячах долларов. Новые коэффициенты сокращения составляют: 35% для сумм свыше 1 миллиарда долларов, 25% для сумм свыше 500 миллионов долларов и 13% для сумм свыше 300 миллионов долларов. Порядок операторов можно выстроить так, чтобы данные не уменьшались более одного раза. Однако при использовании REPEATABLE READ каждый оператор работает с данными до применения каких-либо изменений.

Это упражнение является частью курса

Транзакции и обработка ошибок в PostgreSQL

Посмотреть курс

Инструкции к упражнению

  • Начните транзакцию с уровнем изоляции REPEATABLE READ.
  • Уменьшите значение RCON2203 на 35%, если оно превышает 1 миллиард долларов, на 25% — если превышает 500 миллионов долларов, или на 13% — если превышает 300 миллионов долларов, устанавливая SAVEPOINT после каждого шага.
  • Завершите транзакцию.
  • Подсчитайте суммарное значение поля RCON2203.

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

-- 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 
Редактировать и запускать код