例: DEFAULT関数を使用したUpsert Update - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ操作言語

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Published
2021年1月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/vnq1596660420420.ditamap
dita:ditavalPath
ja-JP/vnq1596660420420.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage

アップサート内の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_2col_3のデフォルト値である20に更新します。これは、DEFAULT関数の引数として渡された列名がcol_3であるためです。

行が存在する場合、更新された行は、次のようになります。(10, 20, 既存の値, 既存の値)。

行が存在しない場合、システムはcol_2の値が10(col_2のデフォルト値)の新しい行を挿入し、col_3に値10(col_2のデフォルト値)を挿入します。新しく挿入される行は次のとおりです。(10, 10, 10, 'aaa')。