1.7.1 ナル値の扱い
ナル値の扱いについて次に示します。
- 〈この項の構成〉
(1) 検索結果の列の値の受け取り
標識変数の値でナル値を受け取ったかどうかが分かります。埋込み変数でナル値を受け取ることはできません。詳細は,「標識変数の値の設定」を参照してください。
(2) 表への値の格納
標識変数の値でナル値を格納したかどうかが分かります。埋込み変数ではナル値を表へ格納できません。詳細は,「標識変数の値の設定」を参照してください。
(3) 比較
NULL述語以外の述語で,指定した値式,列,埋込み変数の値がナル値である行に対して,その述語は不定になります。ただし,埋込み変数でナル値を指定するには,標識変数が必要です。
(4) 結合
結合列にナル値を持つ行は,どのような行に対しても結合条件を満たしません。
(5) ソート
昇順の場合は最後に出力します。降順の場合は,最初に出力します。
(6) グループ分け
グループ分けの条件となる列にナル値を持つ行がある場合は,ナル値同士を同じ値として扱い,グループ分けします。
(7) 重複排除
ナル値同士は,重複するものとして扱います。
(8) 集合関数
集合関数では,基本的にナル値を無視します。ただし,COUNT(*)の場合は,ナル値に関係なく条件を満たすすべての行を計算します。
(9) ウィンドウ関数
COUNT(*) OVER()の場合は,ナル値に関係なく条件を満たすすべての行を計算します。
(10) インデクス
ナル値を含む列に対してもインデクスを定義できます。
(11) 四則演算,日付演算,時刻演算,連結演算
データがナル値の場合,四則演算,日付演算,時刻演算,及び連結演算の結果もナル値になります。
(12) スカラ関数
VALUE又はSTRTONUM以外のスカラ関数では,引数の値式のどちらかがナル値の場合,結果もナル値になります。スカラ関数VALUEでは,引数の値式がすべてナル値であれば,結果もナル値になります。スカラ関数STRTONUMでは,引数1の値式がナル値であれば,結果もナル値になります。
(13) CASE式
CASE略式のCOALESCEの場合,引数の値式がすべてナル値であれば,結果もナル値になります。
(14) 抽象データ型
抽象データ型のナル値の扱いについて,抽象データ型にコンストラクタ関数を指定して値を生成している場合とそうでない場合に分けて,説明します。
-
コンストラクタ関数を指定して値を生成していない場合
抽象データ型全体の値はナル値になります。
-
コンストラクタ関数を指定して値を生成している場合
抽象データ型を構成する各属性の値に関係なく,抽象データ型全体としてはナル値でない値になります。抽象データ型を構成する各属性の値がナル値であっても,抽象データ型全体としての値はナル値にはなりません。
(15) 論理述語
論理値が不定であることと,論理値がナル値であることは等価です。
(16) 繰返し列
要素にはナル値を持つ場合もあります。また,列の要素が0の場合,列全体をナル値とします。
(17) WRITE指定
WRITE指定の場合,引数のどれかがナル値のときは,結果もナル値になります。
(18) GET_JAVA_STORED_ROUTINE_SOURCE指定
次のどれかの条件を満たす場合,GET_JAVA_STORED_ROUTINE_SOURCE指定の結果はナル値になります。
-
引数のうちで,どれかがナル値の場合
-
指定したJARファイルがインストールされていない場合
-
JARファイル中に指定したクラスに対応するソースファイルがない場合
(19) CAST指定
値式にNULLを指定するか,又は値式の結果がナル値の場合は,結果の値はナル値になります。
(20) 参照制約
外部キー構成列中にナル値が含まれる場合,その列は参照制約動作の対象になりません。