16.20 - 例: DEFAULT関数を使用したUpsert Update - Teradata Database - Teradata Vantage NewSQL Engine

Teradata Vantage™ SQLデータ操作言語

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Release Date
2019年3月
Content Type
プログラミング リファレンス
Publication ID
B035-1146-162K-JPN
Language
日本語 (日本)

アップサート内の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')。