WHERE句を使用したROLLBACK - Teradata Database - Teradata Vantage NewSQL Engine - WHERE句を使用したROLLBACK

Teradata Vantage™ SQLデータ操作言語

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/fbo1512081269404.ditamap
dita:ditavalPath
ja-JP/fbo1512081269404.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句が必要です。