WHERE句を使用したROLLBACK - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ操作言語

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/vjt1596846980081.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage

ABORTは、それぞれの値を個別にテストします。そのため、集約される値と集約されない値の両方をWHERE句で指定してはなりません。

実際には、集約される値がGROUP BYの値になり、グループの集約の結果に数学的な計算が実行されます。

例えば、次のすべての条件が当てはまる場合、以下に示すROLLBACK文は誤ってトランザクションを終了します。
  • testテーブルには、いくつかの行があり。
  • Test.colAの合計は188です。
  • test.colBに値125を備えた新しい行が1行だけある。
     ROLLBACK
     WHERE (SUM(Test.colA) <> 188)
     AND (Test.ColB = 125);

先行するリクエストは最初に処理され、1行を選択する条件(ColB  = 125)に従ってすべての行のスキャンが実行された後、条件(SUM(ColA) <> 188)に従って、中間的な集約の結果が計算されます。

選択された行のColAの値は188よりも小さいため、条件はTRUEと判断されます。

ROLLBACK WHEREが使用され、この文に、実行するオブジェクトに対するREADアクセスが必要な場合には、ROLLBACK文を実行するユーザーは、アクセスするデータに対するSELECT権限を持っていなければなりません。

ROLLBACKのWHERE条件には、subqueryを含めることができます。SubqueryにはFROM句が必要です。また、subqueryでの参照の範囲をROLLBACK条件にする場合には、ROLLBACKリクエストにもFROM句が必要です。