16.4. Пример 2 (больше одной подтранзакции)

В одной родительской транзакции может быть несколько подтранзакций, если приложение будет просто повторять цикл помещения/извлечения подтранзакций из стека.

BEGIN; -- начать обычную транзакцию T0
|
INSERT INTO t VALUES (1);
:\
: BEGIN AUTONOMOUS TRANSACTION; -- начать AST-транзакцию T1 (T0 помещается в стек)
: |
: INSERT INTO t VALUES (2);
: |
: COMMIT AUTONOMOUS TRANSACTION / ROLLBACK AUTONOMOUS TRANSACTION; -- завершить транзакцию T1
:                                                                  -- (T0 извлекается из стека)
:/
|
:\
: BEGIN AUTONOMOUS TRANSACTION; -- начать AST-транзакцию T2 (T0 помещается в стек)
: |
: INSERT INTO t VALUES (4);
: |
: COMMIT AUTONOMOUS TRANSACTION / ROLLBACK AUTONOMOUS TRANSACTION; -- завершить транзакцию T2
:                                                                  -- (T0 извлекается из стека)
:/
COMMIT / ROLLBACK; -- завершить транзакцию T0