17.10 - 例: DEFAULT関数を指定したSELECT文 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1146-171K-JPN
Language
日本語 (日本)

列名を指定したDEFAULT関数は、選択射影リストに指定できます。DEFAULT関数は、指定された列のデフォルト値と評価されます。

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

     CREATE TABLE table14 (
       col1 INTEGER,
       col2 INTEGER DEFAULT 10,
       col3 INTEGER DEFAULT 20,
       col4 CHARACTER(60)
       col5 TIMESTAMP DEFAULT NULL,
       col6 TIMESTAMP DEFAULT CURRENT_TIMESTAMP);

次の問合わせは、すべての結果列に、テーブル14のcol2およびcol3のデフォルト値を返します。これは、列のデフォルト値を取得するには非効率的な形式であることに注意してください。なぜなら、システムが問合わせを実行するためにテーブルのフルスキャンを行なうからです。列のデフォルト値を取得するためのより効率的な方法は、FROM句を使用しない問合わせを指定することです。

     SELECT DEFAULT(col2), DEFAULT(col3)
     FROM table14;

table14に4つの行があるとすると、以下の行セットが返されます。

     DEFAULT(col2)  DEFAULT(col3)
     ------------   ------------
               10             20
               10             20
               10             20
               10             20

テーブル内に行がない場合、行は返されません。

次の例では、テーブル14からcol2のデフォルト値が返されます。これにより、特定の列のデフォルト値が明らかになります。これは、列のデフォルト値を取得するには非効率的な形式です。なぜなら、システムが問合わせを実行するためにテーブルのフルスキャンを行なうからです。列のデフォルト値を取得するためのより効率的な方法は、FROM句を使用しない問合わせを指定することです。

     SELECT DISTINCT DEFAULT(col2)
     FROM Table14;

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

               DEFAULT(col2) DEFAULT(col3)
     ----------------------- --------------
                          10             20

テーブル内に行がない場合、行は返されません。

このSELECT文でFROM句が指定されていないと、システムはテーブル内の行の数には関係なく、常に列のデフォルト値が含まれた単一の行のみを返します。これは、TYPE関数の動作と同じです。

     SELECT DEFAULT(table14.col2);

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

     DEFAULT(col2)
     -------------
                10

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

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

     CREATE TABLE table15 (
       col1 INTEGER ,
       col2 INTEGER NOT NULL,
       col3 INTEGER NOT NULL DEFAULT NULL,
       col4 INTEGER CHECK (col4 > 10) DEFAULT 9);

col1には明示的なデフォルト値がないため、DEFAULT関数はNULLと評価されます。

     SELECT DEFAULT(Table15.Col1);

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

     DEFAULT(col1)
     -------------
                 ?

col2には明示的なデフォルト値がないため、DEFAULT関数はNULLと評価されます。この関数は、列のNOT NULL制約が列内でNULLを許可していない場合でも、NULLを返します。

     SELECT DEFAULT(table15.col2);

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

     DEFAULT(col2)
     -------------
                 ?

col3には明示的なデフォルト値であるNULLがあるため、DEFAULT関数の結果はこの明示的なデフォルト値となります。この関数は、列のNOT NULL制約が列内でNULLを許可していない場合でも、NULLを返します。

     SELECT DEFAULT(table15.col3);

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

     DEFAULT(col3)
     -------------
                 ?

col4にはデフォルト値9があり、この値はCHECK制約col4>10に違反しますが、CHECK制約がこの値を列内で許可していなくても、DEFAULT関数は値9を返します。

     SELECT DEFAULT(Table15.Col4);

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

     DEFAULT(Col4)
     -------------
                 9