16.20 - DEFAULT句 - Teradata Vantage NewSQL Engine

Teradata Vantage™ データ タイプおよびリテラル

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1143-162K-JPN

目的

INSERT文で列に対する値が指定されなかった場合には、そのフィールドにユーザー定義のデフォルト値が挿入されることを指定します。

構文



constant_value
INSERT文の列リストの指定でターゲット テーブルの列を省略した場合に挿入されるデフォルト値。
DEFAULT句を指定していないと、NULL受入れ可能な列にはNULLが挿入されますが、それ以外の場合にはエラーが返されます。
デフォルト値はキーワードまたは組み込み関数です。組込み関数の詳細は、<Teradata Vantage™ SQL関数、式、および述部、B035-1145>を参照してください。
有効なキーワードおよび関数を、以下のように定義します。
  • 数字-デフォルト値として数値リテラル値を挿入するように指定します
  • NULL-デフォルト値としてNULL受入れ可能列に対してNULLを挿入するように指定します
  • USER–デフォルト値として現在のユーザーのユーザー名を挿入するように指定します
  • CURRENT_DATE-デフォルト値として現在のシステム日付を挿入するように指定します
  • CURRENT_TIME-デフォルト値として現在のシステム時刻を挿入するように指定します
  • CURRENT_TIMESTAMP-デフォルト値として現在のシステム日付/時刻を挿入するように指定します
DATE
挿入デフォルト値としての日付値(ANSI DATEリテラル形式)。
TIME
挿入デフォルト値としての時刻値(ANSI TIMEリテラル形式)。
TIMESTAMP
挿入デフォルト値としてのタイムスタンプ値(ANSI TIMESTAMPリテラル形式)。
INTERVAL
挿入デフォルト値としての間隔(Interval)値(ANSI INTERVAL形式)。
quotestring
文字列として表現される単一引用符で囲まれたデフォルト値。
sign
間隔値の符号。
qualifier
以下のいずれかの期間を表わす間隔。
  • YEAR
  • YEAR TO MONTH
  • MONTH
  • DAY
  • DAY TO HOUR
  • DAY TO MINUTE
  • DAY TO SECOND
  • HOUR
  • HOUR TO MINUTE
  • HOUR TO SECOND
  • MINUTE
  • MINUTE TO SECOND
  • SECOND

ANSI準拠

DEFAULTは、ANSI SQL:2011に準拠しています。

非ANSIのWITH DEFAULT句も参照してください。

DEFAULTおよびINSERT

DEFAULT VALUESという形式の列式を挿入しようとした場合に、テーブルのいずれかの列にDEFAULT値が定義されていない場合、エラーが返されます。

値が省略されているcolumn_listを明示的に挿入しようとする場合に、省略された列にDEFAULTが定義されていない場合や、その列がNOT NULLで宣言されている場合には、エラーが返されます。

DEFAULTおよびPERIODデータ型

次のデータ型属性は、PERIOD列でサポートされます。
  • DEFAULT NULL
  • DEFAULT値

    指定された値は、PERIODリテラルまたは期間値のコンストラクタでなければなりません。

    期間値のコンストラクタがデフォルト値の指定に使用されるときには、次のルールが適用されます。
    • デフォルト値として、期間値のコンストラクタと単一の引数を使用してはいけません。そうでないと、エラーが報告されます。
    • 開始境界は、日付/時刻リテラル、DATE、CURRENT_DATE、またはCURRENT_TIMESTAMP[(n)]を使用して指定しなければなりません。そうでないと、エラーが報告されます。
    • 開始境界が日付/時刻リテラルの場合、終了境界は日付/時刻リテラルを使用して指定しなければなりません。開始境界にDATEまたはTIMESTAMPデータ型がある場合、終了境界はUNTIL_CHANGEDでなければなりません。そうでないと、エラーが報告されます。
    • 開始境界がDATE、CURRENT_DATE、またはCURRENT_TIMESTAMP[(n)]の場合、終了境界はUNTIL_CHANGED、またはUNTIL_CHANGEDと同等の値を指定する日付/時刻リテラルでなければなりません。そうでないと、エラーが報告されます。
次のデータ型属性は、PERIOD列でサポートされません。
  • DEFAULT USER
  • DEFAULT DATE
  • DEFAULT TIME
  • DEFAULT CURRENT_DATE
  • DEFAULT CURRENT_TIME[(n)]
  • DEFAULT CURRENT_TIMESTAMP[(n)]

列データ型とDEFAULT値

デフォルト値は、その挿入先の列に指定されたデータ型と互換性がなければなりません。例えば、INTEGER DEFAULT 3.5という句は無効であり、エラーが返されます。

CREATE/ALTER TABLE文で指定されるデフォルト値が列のデータ型と異なる場合、日付/時刻データ型に対して、Teradata Databaseは暗黙の変換を実行します。例えば、次の文は有効です。

CREATE TABLE tab1 (F1 INT, F2 TIMESTAMP(0) DEFAULT CURRENT_DATE);

次の表は、それぞれのタイプの列に指定できるデフォルト値です。

列のデータ型 サポートされるデフォルト値
DATE CURRENT_DATE
CURRENT_TIMESTAMP
日付(DATE)リテラル
タイムスタンプ (TIMESTAMP) リテラル
TIME CURRENT_TIME
CURRENT_TIMESTAMP
時刻(TIME)リテラル
タイムスタンプ (TIMESTAMP) リテラル
TIMESTAMP CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
日付(DATE)リテラル
時刻(TIME)リテラル
タイムスタンプ (TIMESTAMP) リテラル
Teradata Databaseでは、次に示すDEFAULT句仕様もサポートしています。
  • CREATE TABLE tab2 (i INT, j INTERVAL DAY DEFAULT 4);
  • CREATE TABLE tab3 (i INT, j INTERVAL HOUR TO MINUTE DEFAULT '11:23' );

日付/時刻データ型の暗黙の変換についての詳細は、<Teradata Vantage™ SQL関数、式、および述部、B035-1145>の「データ型の変換」を参照してください。

文字の列に対するデフォルト値(キーワードを除く)は、列またはセッションの文字セットに定義されている文字データ型のレパートリーに属している必要があります。

ALTER TABLE文では、DEFAULT句をキーワードと共に使用して、事前に定義された値を無効にすることができます。

サポートされないデータ型

以下のデータ型で定義した列のDEFAULT句は指定できません。
  • BLOBまたはCLOB
  • UDT(DEFAULT NULLは除く)

DEFAULT値とCHECK制約

デフォルト値は、その列に指定されたCHECK制約を超えてはなりません。デフォルト値がCHECK制約に違反しても、テーブルの定義または変更時点では矛盾は認識されません。矛盾が認識されされるのは、最初にINSERTまたはUPDATEがNULL値を入力し、そのNULL値がデフォルトに置き換えられたときです。

文字データの場合、制約は現在のセッション照合を使用してチェックされます。このため、デフォルト値がある照合では制約を満たし、別の照合では制約に違反することがあります。

DEFAULT値と識別列

DEFAULT属性をID列に対して指定することはできません。

DEFAULT値とビルトイン関数

constant_valueとして使用されるキーワードは、システム日付、システム時刻、またはユーザー定義の列の名前などのシステムがすでに知っている文字列を挿入します。

Teradata SQLの組込み関数であるDATEとTIMEは、デフォルト値として使用しないことになりました。この2つの関数はANSI標準に入っていません。下位互換性の確保という目的で残されてはいますが、ANSI標準のCURRENT_DATEとCURRENT_TIMEを使用してください。

DEFAULT値の最大長

constant_valueの最大長は、文字列の場合、510文字です。バイト列の場合は、510バイトです。

DEFAULT句のシステム値

TeradataのWITH DEFAULT句とは異なり、DEFAULT句にはシステムのデフォルト値はありません。

DEFAULT句のキーワードの値

以下のテーブルに、DEFAULT句の形式、各変数またはキーワードによって実行される機能、および対応するデフォルトのデータ型を示します。

形式 挿入内容 使用するデータ型
DEFAULT constant_value 列のデフォルトと定義されている値 テーブルの列に定義されているタイプ
DEFAULT DATE quotestring quotestringによって列のデフォルト値として指定される日付値 DATE
DEFAULT NULL NULL なし
DEFAULT CURRENT_DATE 現在のシステム日付 DATE
DEFAULT CURRENT_TIME 現在のシステム時刻 TIME
DEFAULT CURRENT_TIMESTAMP 現在のシステム日付/時刻 TIMESTAMP
DEFAULT USER

(ANSI規格に対するTeradataの拡張機能)

現在のユーザーのユーザー名 CHAR(n) CHARACTER SET UNICODE

VARCHAR(n) CHARACTER SET UNICODE

nはユーザー名として可能な長さの最大値。

CREATE TABLEまたはALTER TABLE ADD文にNOT NULL句と共にDEFAULT NULLが指定された場合、その文についてのエラーまたは警告のメッセージは表示されません。ただし、INSERTまたはUPDATEがヌルを最初に入力しようとしたときに、エラーが発生します。

次のように、ブランクなどのリテラル値を列のDEFAULTとして指定することができます。

CHAR(1) DEFAULT ' ' ...

例: 数値

DepartmentsテーブルでDeptNo列が以下のように定義されていると仮定します。

CREATE TABLE Departments
   (DeptName CHARACTER(36)
   ,DeptNo SMALLINT DEFAULT 100 FORMAT '999' BETWEEN 100 AND 900
   ,ManagerID INTEGER);

INSERT文でDeptNoフィールドの値が指定されない場合には、自動的に値100がSMALLINTタイプで挿入されます。

例: 日付リテラル

以下に示すのは、DATE列にデフォルトの日付リテラルを指定した例です。

F4 DATE DEFAULT DATE '2000-01-01'

例: 現在の時刻

次に示すのは、TIME列にデフォルトとして現在時刻を指定した例です。

Stage TIME(3) DEFAULT CURRENT_TIME(3)

例: 間隔

次に示すのは、INTERVAL列にデフォルトの間隔(Interval)値を指定した例です。

Scale INTERVAL YEAR(2) DEFAULT INTERVAL -'10' YEAR