次の例では、それぞれのレコードに、Employeeテーブルの行の基本索引列(EmpNo)の値が含まれています。そのEmployeeテーブルのPhoneNo列に、Foneフィールドから新しい電話番号が割り当てられることになります。
UPDATEが失敗すると、INSERT文が始動し、Teradata TPumpはUPSERTモードになります。この例では、各レコードに、Employeeテーブルに挿入するべき一連の行の基本索引の値(EmpNum)が入っています。Employeeテーブルは、EmpNoとPhoneNoという列で構成されています。
.BEGINLOAD SESSION number; .LAYOUT Layoutname; .FIELD EmpNum 1 INTEGER; .FIELD Fone * (CHAR (10)); .DML LABEL DMLlabelname DO INSERT FOR MISSING UPDATE ROWS; UPDATE Employee SET PhoneNo = :Fone WHERE EmpNo = :EmpNum; INSERT Employee (EmpNo, PhoneNo) VALUES (:EmpNum, :Fone); .IMPORT INFILE Infilename LAYOUT Layoutname APPLY DMLlabelname; .END LOAD;
DMLコマンド(およびそのラベル)の有効範囲は、DMLコマンドの直後に置かれた任意の種類のコマンドか、DML文を含むファイルの終わりのうち、どちらか最初に登場した方で終了します。
SQLのEXECUTEコマンドは、BEGIN LOADコマンドとEND LOADコマンドの間に配置する必要があります。
IMPORTタスクの場合、1つのDMLコマンドに最大で7種類のエラー処理オプションを指定できます。例:
.DML LABEL COMPLEX IGNORE DUPLICATE INSERT ROWS MARK DUPLICATE UPDATE ROWS IGNORE MISSING UPDATE ROWS MARK MISSING DELETE ROWS DO INSERT FOR MISSING UPDATE ROWS;
更新する行のうち欠落しているものについては、マークしてINSERTとして処理すること、あるいはこの例のように、無視してINSERTとして処理することのどちらも有効です。
- IMPORTタスクにDMLコマンドがない
- IMPORTタスクにおいて、DMLコマンドの範囲外にDML文がある
- IMPORTタスクに、DML文のないDMLコマンドがある
システムの基本出力先に診断メッセージが書き込まれ、Teradata TPumpタスクが終了し、従来の非ゼロ戻りコードを伴なってTeradata TPumpのメイン制御モジュールに戻ります。その場合は、エラーを訂正してから、Teradata TPumpタスクを再実行依頼できます。
DMLコマンド(とその後のDML文)は、適切なBEGIN LOADコマンドと、そのDMLコマンドを参照するIMPORTコマンドとの間に置く必要があります。END LOADコマンドが検出されると、DMLコマンドとDML文のシーケンスは破棄されます。DMLコマンドを複数のBEGIN LOAD文で共有することはできません。DML文については、この後のセクションで説明します。
1つのTeradata TPumpタスクで使用できるDMLコマンドの最大数は128です。データベースに送られるDMLコマンドおよび文の数が多すぎる場合、1つのTeradata TPumpジョブに対するDMLステップが多すぎることを示すエラー メッセージが記録されます。