- DMLグループには、必ず2つだけのDML文が存在しなければなりません。
- 最初のDML文は、Teradata TPumpタスクのすべての規則に従うUPDATE文である必要があります。
- 2番目のDML文は、INSERT文でなければなりません。
- これら2つのDML文は同じテーブルを参照していなければなりません。
- INSERT文がビルドされるときには、UPDATE文のWHERE句で指定されているのと同じ基本索引を反映しなければなりません。これは、1列で成る基本索引の場合と複合基本索引の場合のどちらにも当てはまります。
これらの規則を守ることによって、DO INSERT ROWSオプションを有効に活用することができます。以前は、データをあらかじめINSERT用とUPDATE用に分類するか、あるいは、すべてのデータについてUPDATEを試行してから、失敗したUPDATEに戻ってINSERTを実行するという方法をとっていました。UPSERTを使用することにより、Teradata TPumpは、データを1回引き渡すだけで、更新する必要のある行をUPDATEし、挿入する必要のある行をINSERTすることができます。
DO INSERT ROWSを使用している場合に、MARK MISSING UPDATE ROWSを指定すると、Teradata TPumpは、失敗したUPDATEがあればそれを記録します。このレコードは、DO INSERT ROWSのINSERTが実行されたことを示すエラー コードと一緒に、アプリケーション エラー テーブルに示されます。INSERTが失敗すると、そのINSERT行もアプリケーション エラー テーブルに記録されます。しかしUPSERT機能のデフォルトでは、欠落していた更新行をマークするようになっていません。これは、UPSERT機能を実行する場合、UPDATEが失敗したらINSERTが実行されることを想定しているためです。UPSERTのUPDATE部分での失敗は、それだけではエラーにならないので、エラーとして取り扱うべきではありません。
MARK MISSING DELETE ROWオプションは、DO INSERT ROWSオプションと一緒に使用しても無意味です。
MARK (IGNORE) EXTRA DELETE (UPDATE) ROWSというオプションは、複数の行に影響する更新や削除に対しての保護手段になります。そのような更新や削除がTeradata TPumpで起こり得るのは、基本索引を固有にしないことが可能であるためです。
MARKは、UPSERT以外のすべてのDMLオプションについてのデフォルトです。