7.10.1 DEFAULT句の指定形式および規則
DEFAULT句には,列の既定値を指定します。列の既定値とは,次のときに列に格納されるデフォルトの列値のことです。
-
INSERT文による行の挿入時
次の場合に列の既定値が格納されます。
-
挿入値にDEFAULTを指定した場合
-
DEFAULT VALUESを指定した場合
-
データを挿入する列の列名の指定を省略した場合(すべての列名を省略した場合を除きます)
-
ビュー表に行を挿入した場合(ビュー表の列に対応しない基表の列には,列の既定値が格納されます)
-
-
UPDATE文による列値の更新時
更新値にDEFAULTを指定した場合に,列の既定値が格納されます。
-
adbimportコマンドによるデータインポート時
adbimportコマンドでデータをインポートする際,入力データファイルのフィールドデータが空文字列の場合に,列の既定値が格納されます。
ただし,インポートオプションのadb_import_null_stringにNULLを指定した場合は,列の既定値ではなくナル値が格納されます。
- 〈この項の構成〉
(1) 指定形式
DEFAULT句::=DEFAULT 既定値選択肢 既定値選択肢::={定数|CURRENT_DATE|CURRENT_TIME〔(p)〕 |CURRENT_TIMESTAMP〔(p)〕|CURRENT_USER|NULL}
(2) 指定形式の説明
- 定数:
-
列の既定値を定数の形式で指定します。定数については,「6.3 定数」を参照してください。
列の既定値を設定する列のデータ型と,既定値選択肢に指定できる定数の種類を次の表に示します。
表7‒2 列の既定値を設定する列のデータ型と,既定値選択肢に指定できる定数の種類 列の既定値を設定する列のデータ型
既定値選択肢に指定できる定数
数定数
文字列定数
日付定数
時刻定数
時刻印定数
バイナリ定数
数データ
○
×
×
×
×
×
文字データ
×
○※1
×
×
×
×
日時データ
DATE型
×
○※2
○
×
○
×
TIME型
×
○※2
×
○
×
×
TIMESTAMP型
×
○※2
○
×
○
×
バイナリデータ
×
×
×
×
×
○※1
- (凡例)
-
○:指定できます。ただし,格納代入の規則が適用されます。※3
×:指定できません。
- 注※1
-
1,024バイト以上の文字列定数またはバイナリ定数は指定できません。
- 注※2
-
既定の入力表現の形式で文字列定数を記述した場合に限り指定できます。既定の入力表現については,「6.3.3 既定の文字列表現」を参照してください。
- 注※3
-
格納代入の規則の詳細については,「6.2.2 変換,代入,比較できるデータ型」の「(2) 格納代入できるデータ型」を参照してください。
格納代入の規則が適用されるため,例えば,「列の既定値として指定した文字列定数のデータ長>DEFAULT句を指定した列のデータ長」の場合,CREATE TABLE文がエラーになります。
- CURRENT_DATE:
-
INSERT文またはUPDATE文を実行した日付,またはadbimportコマンドを起動した日付が,列の既定値として設定されます。
CURRENT_DATEは,DATE型またはTIMESTAMP型の列に指定できます。
CURRENT_DATEの指定規則の詳細については,「6.4.1 CURRENT_DATE」を参照してください。
- CURRENT_TIME〔(p)〕:
-
INSERT文またはUPDATE文を実行した時刻,またはadbimportコマンドを起動した時刻が,列の既定値として設定されます。
pには小数秒精度(小数秒の桁数)を指定します。(p)を省略した場合,p=0が仮定されます。
CURRENT_TIMEは,TIME型の列に指定できます。
CURRENT_TIMEの指定規則の詳細については,「6.4.2 CURRENT_TIME」を参照してください。
- CURRENT_TIMESTAMP〔(p)〕:
-
INSERT文またはUPDATE文を実行した日付と時刻,またはadbimportコマンドを起動した日付と時刻が,列の既定値として設定されます。
pには小数秒精度(小数秒の桁数)を指定します。(p)を省略した場合,p=0が仮定されます。
CURRENT_TIMESTAMPは,DATE型またはTIMESTAMP型の列に指定できます。
CURRENT_TIMESTAMPの指定規則の詳細については,「6.4.3 CURRENT_TIMESTAMP」を参照してください。
- CURRENT_USER:
-
INSERT文,UPDATE文,またはadbimportコマンドを実行したユーザの認可識別子が,列の既定値として設定されます。
CURRENT_USERは,CHARACTER型またはVARCHAR型の列に指定できます。
CURRENT_USERの指定規則の詳細については,「6.5.1 CURRENT_USER」を参照してください。
- NULL:
-
列の既定値としてナル値を設定する場合に指定します。
非ナル値制約(ナル値を許さない制約)を定義している列には,NULLを指定できません。
- メモ
-
-
CURRENT_DATEを指定した際の日付,CURRENT_TIME〔(p)〕を指定した際の時刻,またはCURRENT_TIMESTAMP〔(p)〕を指定した際の日付と時刻は,HADBサーバで取得されます。
-
1つのSQL文で複数の行に列の既定値を格納する場合,CURRENT_DATEを指定しているときは,すべて同じ日付が格納されます。CURRENT_TIME〔(p)〕を指定しているときは,すべて同じ時刻が格納され,CURRENT_TIMESTAMP〔(p)〕を指定しているときは,すべて同じ日付と時刻が格納されます。
-
(3) 規則
-
DEFAULT句を省略した場合,ナル値が列の既定値になります。
-
列の既定値を設定した列にデータを格納する際,代入規則に従って格納されます。例えば,TIMESTAMP型の列にCURRENT_DATEを指定した場合,代入規則に従って時刻00:00:00が付与されてデータが格納されます。代入規則の詳細については,「6.2.2 変換,代入,比較できるデータ型」の「(2) 格納代入できるデータ型」を参照してください。
-
CURRENT_TIME(p)またはCURRENT_TIMESTAMP(p)によって取得される小数秒の精度は,ハードウェアの性能に依存します。例えば,CURRENT_TIME(12)を指定しても,使用しているハードウェアによっては12桁の小数秒精度が取得できないことがあります。
(例)
10:35:55.123456000000
小数秒精度が6桁までしか取得できない場合,上記のように7桁目以降は0になります。
(4) 例題
- 例題
-
販売履歴表(SALESLIST)を定義します。購入日(PUR-DATE)列にDEFAULT句を指定して,列の既定値を設定します。
CREATE FIX TABLE "SALESLIST" ("USERID" CHAR(6), "PUR-CODE" CHAR(4), "PUR-NUM" SMALLINT, "PUR-DATE" DATE DEFAULT CURRENT_DATE) IN "DBAREA01" PCTFREE=20 CHUNK=200
下線部分がDEFAULT句の指定です。