t1 より上の t3 から t10 でいずれかの検証が失敗した場合、t2 テーブルの挿入はロールバックする必要があります。
つまり、T3..T10 への挿入中に何か問題が発生した場合、トランザクション全体を最初のポイントにロールバックする必要があります。つまり、T1 および T2 への挿入もロールバックする必要があります。
それでは、なぜセーブポイントを作成するのか。ROLLBACKを発行するだけで、すべての挿入、トランザクション全体がロールバックされます。
とにかく、本当に必要な場合は、T1 でトランザクションを開始する前に、まず SAVEPOINT を作成してください。これで、いずれかの検証が失敗した場合、ROLLBACK TO SAVEPOINTがトランザクション全体をロールバックします。
ROLLBACK TO SAVEPOINT は、その特定の SAVEPOINT の後に発生したすべてのトランザクションがそのセーブポイントまでロールバックされることを意味します。
例えば、
SQL> SAVEPOINT A
SQL> INSERT INTO TEST VALUES (1,'Savepoint A');
1 row inserted.
SQL> SAVEPOINT B
SQL> INSERT INTO TEST VALUES (2,'Savepoint B');
1 row inserted.
SQL> ROLLBACK TO B;
Rollback complete.
SQL> SELECT * FROM TEST;
ID MSG
-------- -----------
1 Savepoint A
サンプルソース