BEGIN TRANSACTION/END TRANSACTIONのペアが入れ子になっている場合、Teradata Databaseは、BEGIN TRANSACTION文とEND TRANSACTION文がそれぞれ対応しているかどうかを検証します。
一番外側のBEGIN TRANSACTION/END TRANSACTIONペアは明示的トランザクションを定義します。Teradata Databaseはトランザクションの入れ子をサポートしないため、内側のBEGIN TRANSACTION/END TRANSACTIONペアはトランザクションに影響を及ぼしません。
埋め込まれた複文リクエストとマクロ実行は、一番外側のBEGIN TRANSACTION/END TRANSACTION明示トランザクションの一部であるとみなされ、この文脈での暗黙のトランザクションとはみなされません。
複文リクエストでは、1つのBEGIN TRANSACTION文のみ指定することができます。BEGIN TRANSACTION文を指定する場合は、リクエストの最初の文でなければなりません。
例えば、以下のような一連のリクエストは、1つの明示的トランザクションとして処理されます。
BEGIN TRANSACTION; SELECT …; UPDATE … EXEC a(3,4); BEGIN TRANSACTION; UPDATE …; INSERT … ;INSERT …; END TRANSACTION; INSERT …; END TRANSACTION;
入れ子のBEGIN TRANSACTION/END TRANSACTIONの途中でエラーが発生した場合には、すべてが最初のBEGIN TRANSACTIONにロールバックされます。