17.05 - FOR TRANSACTION - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Release Date
2021年1月
Content Type
プログラミング リファレンス
Publication ID
B035-1144-175K-JPN
Language
日本語 (日本)

namevalueのペアのセットで指定されたクエリー バンドのセットが、現在のトランザクションに適用されます。

既存のセッションのクエリー バンドと同時にトランザクションのクエリー バンドを設定できます。

一度にアクティブにできるトランザクション クエリー バンドは1つだけです。

トランザクション内で順に個々のSET QUERY_BAND = … FOR TRANSACTIONリクエストが実行されるたびに、そのクエリー バンドは現在のトランザクション クエリー バンドを置き換えます。

複文リクエスト内で規定される場合、SET QUERY_BAND … FOR TRANSACTIONは指定される最初のリクエストでなければなりません。複文リクエストで、Vantageはトランザクション クエリー バンドを1つだけ、リクエスト内のすべての文に適用します。Teradata Active Systems Management (TASM)の分類が、複文リクエスト内のすべての文で1度だけ発生します。

プロキシ ユーザーが複文リクエストのSET QUERY_BAND文で設定された場合、トランザクション クエリー バンドが以下によって指定されている場合を除き、Vantageはプロキシ ユーザー権限をリクエスト内のすべての文に適用します。
  • ? パラメータ(JavaまたはODBCプログラム内)。
  • マクロ。
  • SQLプロシージャ。

上記の場合のみ、Vantageは信頼済みセッションの権限を複文リクエストの文に適用しません。そのため、複数文からなるリクエストごとに1つのSET QUERY_BAND … FOR TRANSACTION文のみ指定できます。

トランザクションのクエリー バンドはDBC.SessionTblに格納されません。

Vantageは、トランザクションの終了時に、次のSQLトランザクション終了文のいずれかにより指定されるように、現在のトランザクションのクエリー バンドを破棄します。
  • ABORT
  • COMMIT
  • ROLLBACK

これらの文の詳細については、<Teradata Vantage™ - SQLデータ操作言語、B035-1146>を参照してください。

Vantageは、システムの再始動後は現行トランザクションのクエリー バンドを復元しません。

SET QUERY_BAND … FOR TRANSACTIONは、マクロとSQLプロシージャの両方でサポートされます。

SET QUERY_BAND … FOR TRANSACTIONはTeradata Parallel Transporterでサポートされません。

次の処理は、SET QUERY_BAND = … FOR TRANSACTIONリクエストのコンテキストでのクエリー バンドのユース ケースを説明します。

  1. Javaで実装されているWebサービスがHTTP/SOAP (Hypertext Transfer Protocol/Simple Object Access Protocol)リクエストに応答します。
  2. WebサービスがJTA (Java Transaction API)を使用してユーザー管理トランザクションを開始します。
  3. Webサービスがアプリケーション サーバーにより管理される接続プールからJDBC接続を取得します。
  4. WebサービスがJDBC (Java Database Connectivity)を使用してSQLリクエストを実行し、トランザクションのクエリー バンドを確立します。
  5. Webサービスが複数のEJB (Enterprise Java Beans)を呼び出して何らかの処理を実行します。例えば、最初のEJBは行をテーブルAに挿入し、2番目のEJBはテーブルBの一部の行を更新します。EJBへのすべての呼び出しは同じトランザクションに関与するため、同じクエリー バンドで識別されます。
  6. Webサービスがトランザクションをコミットします。

トランザクションのクエリー バンドの値は自動的に消去されるため、プールされた接続に対する以降のSQLリクエストは別のクエリー バンドの値になります。