В одной родительской транзакции может быть несколько подтранзакций, если приложение будет просто повторять цикл помещения/извлечения подтранзакций из стека.
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