目的
INSERT文で列に対する値が指定されなかった場合には、そのフィールドにシステム定義のデフォルト値を挿入するように指定します。
構文
ANSI準拠
WITH DEFAULTは、ANSI SQL:2011規格に対するTeradataの拡張機能です。
使用上の注意
この句のANSI形式については、DEFAULT句を参照してください。
数値範囲の制約を伴うWITH DEFAULT句を使用する場合には、その列に定義されたデータ型に割り当てられたシステムのデフォルト値はその範囲内である必要があります。
CREATE TABLE文の処理において、すべてのWITH DEFAULT句は、システム デフォルト値がデフォルトの定数値(constant_value)になるDEFAULT句に変換されます。
非互換性に関する注意
WITH DEFAULT句とDEFAULT句は、相互に排他的です。
WITH DEFAULT句のシステム値
システムのデフォルト値は、その列に対して定義したデータ型によって定まります。データ型とそれに関連するシステムのデフォルト値を以下のテーブルに示します。
データ型 | システムのデフォルト |
---|---|
BIGINT | ゼロ |
BYTE[(n)] | nが省略された場合、またはnが2進数0の場合、0 |
BYTEINT | ゼロ |
CHAR[(n)] | 以下に示すとおり、サーバー文字セットによって異なります。
|
DATE | 現在の日付 |
DECIMAL NUMERIC | ゼロ |
DOUBLE PRECISION | ゼロ |
FLOAT | ゼロ |
INTEGER | ゼロ |
INTERVAL DAY | INTERVAL ' 0 ' DAY |
INTERVAL DAY TO HOUR | INTERVAL ' 0 00 ' DAY TO HOUR |
INTERVAL DAY TO MINUTE | INTERVAL ' 0 00:00 ' DAY TO MINUTE |
INTERVAL DAY TO SECOND | INTERVAL ' 0 00:00:00 ' DAY TO SECOND |
INTERVAL HOUR | INTERVAL ' 0 ' HOUR |
INTERVAL HOUR TO MINUTE | INTERVAL ' 00:00 ' HOUR TO MINUTE |
INTERVAL HOUR TO SECOND | INTERVAL ' 00:00:00 ' HOUR TO SECOND |
INTERVAL MINUTE | INTERVAL ' 0 ' MINUTE |
INTERVAL MINUTE TO SECOND | INTERVAL ' 00:00 ' MINUTE TO SECOND |
INTERVAL MONTH | INTERVAL ' 0 ' MONTH |
INTERVAL SECOND | INTERVAL ' 0 ' SECOND |
INTERVAL YEAR | INTERVAL ' 0 ' YEAR |
INTERVAL YEAR TO MONTH | INTERVAL ' 0-00 ' YEAR TO MONTH |
NUMBER | ゼロ |
PERIOD(DATE) | デフォルト値は、CURRENT_DATEに設定された開始の引数とUNTIL_CHANGEDに設定された終了の引数のある期間値のコンストラクタを使用して、暗黙に設定されます。 |
PERIOD(TIMESTAMP) | デフォルト値は、CURRENT_TIMESTAMP[(n)]に設定された開始の引数とUNTIL_CHANGEDに設定された終了の引数のある期間値のコンストラクタを使用して、暗黙に設定されます。 |
REAL | ゼロ |
SMALLINT | ゼロ |
TIME | CURRENT_TIME |
TIMESTAMP | CURRENT_TIMESTAMP |
TIMESTAMP WITH TIME ZONE | CURRENT_TIMESTAMP |
TIME WITH TIME ZONE | CURRENT_TIME |
VARBYTE (n) | ' ' (NULL文字列) |
サポートされないデータ型
以下のデータ型で定義した列のWITH DEFAULT句は指定できません。
- BLOBまたはCLOB
- UDT
- PERIOD(TIME)
例: WITH DEFAULT句
例えば、EdLev列が次のように定義されていると、
EdLev BYTEINT FORMAT 'Z9' NOT NULL WITH DEFAULT,
EdLevの列定義は次のように格納されます。
EdLev BYTEINT NOT NULL DEFAULT 0 FORMAT 'Z9',
例: デフォルト値を使用した行の挿入
次のINSERT文は、前の例で定義したEdLevフィールドにゼロを持つ行を加えます。
INSERT INTO Employee (Name, EmpNo, DeptNo, DOB, Sex, EdLev) VALUES ('Newhire A', 10025, 700, '49/10/17', 'M',) ;
例: TIME列のデフォルトとして現在時刻を指定
次に示すのは、TIME列にデフォルトとして現在時刻を指定した例です。
Stage TIME(3) WITH DEFAULT
例: デフォルトの間隔を指定したINTERVAL列
次に示すのは、INTERVAL列にデフォルトの間隔(Interval)値を指定した例です。
Scale INTERVAL HOUR(2) WITH DEFAULT