Atomic Upsert機能のその他の制約 - Parallel Data Pump

Teradata® Parallel Data Pumpリファレンス

Product
Parallel Data Pump
Release Number
17.10
Published
2021年6月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/oqw1608578437373.ditamap
dita:ditavalPath
ja-JP/oqw1608578437373.ditaval
dita:id
B035-3021
Product Category
Teradata Tools and Utilities

これらの制約の一部には、UPDATE文およびINSERT文で別々にサポートされている構文に関係するものもあります。ただし、Atomic UPSERT文の中で組み合わせて使用した場合は例外です。UPSERT機能ではこれ以外にも、特定のデータベース機能(トリガーや結合/ハッシュ索引)がサポートされていないことに関連した制約があります。つまり、これらの機能を使用するテーブルに対してはUPSERT文を使えないということです。

Atomic UPSERT機能でサポートされていない制約で、データベースに送信したときにエラーが返されるものを次に示します。
  • INSERT … SELECT: 構文はサポートされていません。挿入値のいずれかを指定するための副問合わせが、INSERTに使用されていない可能性があります。この構文がサポートされた場合、上述したUPDATEのWHERE句制約の副問合わせに対するサポートにつながることが見込まれ、新しい構文機能の追加によってUPDATEおよびINSERTから同じ副問合わせへの参照の効率化が可能になることに注意してください。
  • UPDATE-WHERE-CURRENT: 構文はサポートされていません。WHERE句では、いわゆる位置指定によるUPDATEを実行する際に、更新可能なカーソルを使用することはできません。(この構文がサポートされることはほとんどありません。この制限によって、カーソルが他の方法で使用されるのを防ぐわけではありません。例えば、UPSERT文をDECLARE CURSOR文の中に含めて、カーソルを開いたときに実行されるようにできます(そうしなければUPSERTが有効にならない場合)。
  • UPDATE-FROM: サポートされていません。SET句では、カラムの値を更新する式の中にFROM句によるテーブル参照を使用することはできません。
  • UPDATE-WHERE SUBQUERIES: サポートされていません。基本索引を指定する副問合わせ、または索引以外のカラムを制約する副問合わせを、WHERE句に使用することはできません。このUPDATE構文をサポートする場合は、UPDATEと同じ基本索引値を指定するためのINSERT … SELECTまたはそれ以外のINSERT構文機能もサポートする必要があることに留意してください。
  • UPDATE-PRIMARY INDEX: サポートされていません。UPDATEでは、基本索引の変更はできません。この更新は、不当な更新と呼ばれる場合もあります。
  • TRIGGERS: UPDATEまたはINSERTのどちらかによってトリガーが有効化される場合、機能はサポートされません。この制約は、UPDATEおよびINSERTの両方が実行された場合にも同様に適用されます。構文解析プログラムのトリガー ロジックは、トリガーの条件付き実行を試みるものではないからです。UPDATEでは、UPDATE句で参照されない列にトリガーが送られます。しかし、UPSERTでは有効化されないため許可されています。DELETEトリガーもUPSERTで有効化されることはないため、同様に許可されています。UPSERTをトリガー アクションとして使用することも可能ですが、その場合は他のUPSERTと同様の制約を受ける恐れがあるので注意してください。UPSERTは自身ではトリガーを有効化できないため、これ以上のカスケード式トリガー アクションをUPSERTトリガー アクションによって生成することは許可されません。
  • JOIN/HASH INDEXES: UPDATEまたはINSERTのどちらかによって結合/ハッシュ索引が更新された場合、機能はサポートされません。トリガーの場合と同様で、UPDATEとINSERTの両方を実行したときと同じように、各UPSERTに制約が適用されます。更新された列を結合/ハッシュ索引が参照しない場合、UPDATEではこの制約を免れることができます。しかし、INSERTがこの制約を免れることのできる見込みはほとんどありません(不可能な場合もあります)。極めて稀な結合/ハッシュ索引の例を2~3挙げて制約を解除するメリットを示したときに、導入費用に見合う価値がないことが判明した場合は、関連する結合/ハッシュ索引を持ったテーブルに対して制約をさらに広範に適用する必要があります。

制約が失敗した場合、致命的でないエラーとして扱い、ジョブ ログ内のエラーを診断の目的のためにレポートした後、UPSERTプロトコルを元の非Atomicなものに戻してジョブを続行します。