17.10 - 使用上の注意 - Advanced SQL Engine - Teradata Database

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

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

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文で指定されるデフォルト値が列のデータ型と異なる場合、日付/時刻データ型に対して、SQL Engineは暗黙の変換を実行します。例えば、次の文は有効です。

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) リテラル
Vantageでは、次に示すDEFAULT句仕様もサポートしています。
  • CREATE TABLE tab2 (i INT, j INTERVAL DAY DEFAULT 4);
  • CREATE TABLE tab3 (i INT, j INTERVAL HOUR TO MINUTE DEFAULT '11:23' );

DateTimeデータ型の暗黙の変換についての詳細は、<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 ' ' ...