Следующая схема иллюстрирует пример, когда в транзакции выполняется подтранзакция. Непрерывная линия обозначает активную транзакцию, а пунктирная — транзакцию, которая была приостановлена и помещена в стек AST. Течение времени направлено вниз.
BEGIN; -- начать обычную транзакцию T0 | INSERT INTO t VALUES (1); :\ : BEGIN AUTONOMOUS SUBTRANSACTION; -- начать AST-транзакцию T1 (T0 помещается в стек) : | : INSERT INTO t VALUES (2); : | : COMMIT AUTONOMOUS TRANSACTION / ROLLBACK AUTONOMOUS TRANSACTION; -- завершить транзакцию T1 : -- (T0 извлекается из стека) :/ COMMIT / ROLLBACK; -- завершить транзакцию T0
В зависимости от выбора между COMMIT и ROLLBACK в двух местах, мы можем получить 4 разных результата из:
SELECT sum(x) from t;