アップサート内のUPDATE操作またはINSERT操作のいずれかにDEFAULT関数が使用された場合、この関数は参照された列のデフォルト値と評価されます。これは、Teradataの拡張機能です。
たとえば、以下のテーブル定義があると仮定します。
CREATE TABLE table_19 ( col_1 INTEGER, col_2 INTEGER DEFAULT 10, col_3 INTEGER DEFAULT 20, col_4 CHARACTER(60)); UPDATE table19 SET col_2 = DEFAULT WHERE col1 = 10 ELSE INSERT table_19 (10, DEFAULT, DEFAULT, 'aaa');
次のリクエストでは、WHERE条件がtrueと評価されるかどうかによって、col_2の値をcol_2のデフォルト値、つまり10に更新します。
行が存在する場合、更新された行は、次のようになります。(10, 10, 既存の値, 既存の値)。
行が存在しない場合、システムはcol_2の値が10(col_2のデフォルト値)の新しい行を挿入し、col_3に値20(col_3のデフォルト値)を挿入します。新しく挿入される行は次のとおりです。(10, 10, 20, 'aaa')。
次の例では、UPDATEアップサート リクエスト内で正しくDEFAUL関数が使用されています。
UPDATE table_19 SET col_2 = DEFAULT(col3) WHERE col_1 = 10 ELSE INSERT table_19 (10, DEFAULT, DEFAULT(col_2), 'aaa');
col_1の値が10の場合、このアップサートはcol_2をcol_3のデフォルト値である20に更新します。これは、DEFAULT関数の引数として渡された列名がcol_3であるためです。
行が存在する場合、更新された行は、次のようになります。(10, 20, 既存の値, 既存の値)。
行が存在しない場合、システムはcol_2の値が10(col_2のデフォルト値)の新しい行を挿入し、col_3に値10(col_2のデフォルト値)を挿入します。新しく挿入される行は次のとおりです。(10, 10, 10, 'aaa')。