例: DEFAULT関数を使用した単純なINSERTリクエスト - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/vjt1596846980081.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage

次の一連の例では、このテーブル定義を使用します。

     CREATE TABLE table7 (
       col1 INTEGER,
       col2 INTEGER DEFAULT 10,
       col3 INTEGER DEFAULT 20,
       col4 CHARACTER(60) );

次のINSERTリクエストは有効です。

     INSERT INTO table7
       VALUES (1, 2, DEFAULT, 'aaa');

DEFAULT関数は、挿入リストの3番目の列位置、つまりtbl_sourceのデフォルト値と評価されます。この例のINSERTリクエストは、table7tbl_sourceに値20を挿入します。

返される行は次のとおりです。

      col1        col2        col3 col4
---------- ----------- ----------- -----------
         1           2          20 aaa

次のINSERTリクエストは有効です。

     INSERT INTO table7 (col1, col3, col4)
     VALUES (1, DEFAULT, 'bbb');

式リストの2番目にDEFAULTが指定されており、列リストの2番目の列はtbl_sourceであるため、DEFAULT関数は、tbl_sourceのデフォルト値と評価されます。

返される行は次のとおりです。

      col1        col2        col3 col4
---------- ----------- ----------- ----------
1          10          20 bbb

DEFAULT関数は、式リストにおいて列名で指定できます。これは、ANSI SQL:2011規格に対するTeradata拡張機能です。

次のINSERTリクエストは有効です。

     INSERT INTO table7
     VALUES (1, 2, DEFAULT(col2), 'aaa');

col2が入力引数としてDEFAULT関数に渡されるため、DEFAULT関数はcol2のデフォルト値と評価されます。tbl_sourceは挿入リストの3番目の列位置にあるため、INSERTの結果は、行内のtbl_sourceの値10になります。

返される行は次のとおりです。

       col1        col2        col3 col4
----------- ----------- ----------- ------------
          1           2          10 aaa

次のINSERTリクエストは有効です。

     INSERT INTO table7 (col1, col3, col4)
     VALUES (1, DEFAULT(col2), 'bbb');

col2が入力引数としてDEFAULT関数に渡されるため、DEFAULT関数はcol2のデフォルト値と評価されます。列リストの2番目の列はtbl_sourceであるため、システムによってこれに値10が割り当てられます。これは、col2のデフォルト値です。

返される行は次のとおりです。

            col1        col2        col3 col4
     ----------- ----------- ----------- ------
               1          10          10 bbb

DEFAULT関数は、式内の任意の位置に列名で指定できます。これは、ANSI SQL:2011規格に対するTeradata拡張機能です。

次のINSERTリクエストは有効です。

     INSERT INTO table7
     VALUES (1, 2, DEFAULT (col2)+5, 'aaa');

DEFAULT関数は、col2のデフォルト値プラス5 (つまり10+5)と評価されます。tbl_sourceは挿入リストの3番目の列位置であるため、結果の行は次のようになります。

           col1        col2        col3 col4
     ---------- ----------- ----------- -----------------
              1           2          15 aaa

次のINSERTリクエストは有効です。

     INSERT INTO table7 (col1, col3, col4)
     VALUES (1, DEFAULT(col2)+5, 'bbb');

DEFAULT関数は、col2のデフォルト値プラス5 (つまり10+5)と評価されます。列リストの2番目の列はtbl_sourceであるため、システムによってこれに値15が割り当てられます。返される行は次のとおりです。

     col1        col2        col3           col4
     ---------- ----------- ----------- ---------------
              1          10          15            bbb

列にデフォルト値が明示的に関連付けられていない場合、DEFAULT関数はNULLと評価されます。

例えば、以下のテーブル定義があると仮定します。

     CREATE TABLE table9 (
       col1 INTEGER,
       col2 INTEGER NOT NULL,
       col3 INTEGER NOT NULL DEFAULT NULL
       col4 INTEGER CHECK (Col4>100) DEFAULT 99   );

次のINSERTリクエストは有効です。

     INSERT INTO table9
       VALUES (DEFAULT, 99, 101, 101);

この例では、col1はNULL受入れ可能であり、明示的にデフォルト値が関連付けられていないため、DEFAULT関数はNULLと評価されます。

返される行は次のとおりです。

            col1         col2         col3         col4
     -----------  -----------  ----------- ------------
               ?           99          101          101

例えば、以下のテーブル定義があると仮定します。

     CREATE TABLE table10
       col1 INTEGER ,
       col2 INTEGER DEFAULT 55,
       col3 INTEGER NOT NULL DEFAULT 99 );

次の例は正しく、DEFAUL関数のTeradata拡張機能を使用しています。

     INSERT INTO table10
     VALUES (1, DEFAULT(col2), DEFAULT(col3));

     INSERT INTO table10 (col1, col2)
     VALUES (1, DEFAULT(col2));

     INSERT INTO table10 (col1, col2, col3)
     VALUES (1, DEFAULT(col2), DEFAULT(col3));

次の例は正しく、DEFAUL関数のANSI SQL:2011準拠の構文を使用しています。

     INSERT INTO table10
     VALUES (1, DEFAULT, DEFAULT);

     INSERT INTO table10 (col1, col2)
     VALUES (1, DEFAULT);

     INSERT INTO table10 (col1, col2, col3)
     VALUES (1, DEFAULT, DEFAULT);

上記すべての挿入操作の結果行は、次のようになります。

      col1         col2         col3
     -----  -----------  -----------
         1           55           99

次のINSERTリクエストは、互いに等価です。最初の例では、ANSI-SQL:2011-準拠の構文を使用しています。

     INSERT INTO table10
     VALUES (5, DEFAULT, 99);

次の例では、ANSI-SQL:2011構文のTeradata拡張機能を使用しています。

     INSERT INTO table10
     VALUES (5, DEFAULT(col2), 99);

これら両方の挿入操作の結果行は、次のようになります。

       col1         col2         col3
     ------  -----------  -----------
          5           55           99