17.05 - WHERE句を使用したROLLBACK - 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-1146-175K-JPN
Language
日本語 (日本)

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句が必要です。