TROLLBACKコマンドは、トランザクション内で実行されているすべてのデータベース更新を削除するROLLBACKを引き起こすことによって、トランザクションを終了します。引数なしのTROLLBACKもまた、$TLEVELと$TRESTARTをゼロ(0)にセットします。トランザクションが($TLEVEL=0)進行中でないとき、発行中のTROLLBACKはエラーを生成します。
TROLLBACKコマンドのフォーマットは:
TRO[LLBACK][:tvexpr] [intexpr]
オプションでコマンド直後に続く真理値の式は、GT.Mがコマンドを実行するかどうかをコントロールする後置コマンドです。
オプションの整数式は、インクリメンタルロールバックを指定する引数を示します。もし引数の式の値がゼロより大きい場合、それはロールバックによって達成される$TLEVELの値を指定します。もし式の値がゼロより小さい場合、結果はロールバックのレベルの数です。例えば、 -1 は、1つのレベルをロールバックします。もし引数の式がゼロの場合、引数を指定しない場合と同じ効果があります、すなわち、GT.Mのトランザクション全体がロールバックされます。
$TLEVELレベル(最も外側のトランザクション)以上のロールバックをしようとすると、エラーを生成します。
TROLLBACKに引数がない時、行の中で次のコマンドと区別するために、コマンドに続き少なくとも2つのスペースが必要です。
エラーリカバリ および/または エラーのグローバルコンテキストへのアクセスを可能にするために、エラーは暗黙的なROLLBACKを初期化しません。したがって、トランザクション中にエラーを処理するコードは、一般的に、TROLLBACKを含める必要があります。TROLLBACKがトランザクションによって保持されているリソースをリリースするため、それはエラー処理コード内でできるだけ早く現す必要があります。
TROLLBACKは、制御の移行は発生しませんが、しかし、通常はQUIT(またはGOTO)のような1つのものに関連付けられています。
ゼロ(0)以外の $TLEVELにTROLLBACKすると $REFERENCE は空になります。この動作は、$TEVEL=0 まで完全なTROLLBACKと同じです。
TROLLBACKコマンドの使用例については、第5章:“Mの一般的な言語特徴” を参照してください。