マクロの実行は、暗黙のトランザクションを構成します。そのため、Teradataセッション モードでは、BEGIN TRANSACTION文とEND TRANSACTION文でマクロを囲む必要はありません。
マクロを実行するセッションがANSIモードの場合には、マクロ本体がCOMMIT文で終了しない限り、以降の文でコミットまたはロールバックが発生するまでマクロの動作はコミットされません。COMMIT文を使用してマクロを定義した場合には、そのマクロはANSIモードで実行するセッションでのみ実行されます。
以下の表は、ANSIとTeradataの両方のセッション モードでコミットできるように、マクロを定義して使用する方法を示しています。
マクロを実行するセッション モード | 結果 |
---|---|
ANSIモードのみ | その定義の最後にCOMMIT WORK文を追加します。 |
ANSIモードとTeradataモードの両方 | 定義にはCOMMIT WORK文を含めないようにします。 このマクロをANSIセッション モードで実行する場合は、明示的にCOMMIT WORK文を指定するようにユーザーに通知してください。 |
すべてのリクエストが正常に完了するまで、マクロ本体に含まれる個別の文に対する応答をユーザーが受け取ることはありません。マクロのトランザクションが終了するまで、または文の誤りによってマクロが終了されるまで、リクエストによって参照されるオブジェクトにはロックが設定されます。
マクロにデータ定義文を含める場合は、その他のリクエストを含められません。マクロ内のデータ定義文はマクロが実行されるまで完全には解釈されません。修飾されていないオブジェクト参照の解釈には、実行の時点でそのEXECUTE文を実行したユーザーのデフォルトのデータベースが使用されます。そのため、マクロのデータ定義文のオブジェクトの参照は、そのマクロの中で修飾しておくことを勧めます。