Sql-certificate-conditional-expressions
条件式を使用する
一般的な機能
データベース内のNULL値を処理するには、一般関数を使用します。 一般的なNULL処理関数の目的は、NULL値を代替値に置き換えることです。 以下にこれらの機能を簡単に説明します。
NVL
NVL関数は、NULL値を代替値に置き換えます。
構文:
構文では、両方のパラメーターが必須です。 NVL関数は、すべての種類のデータ型で機能することに注意してください。 また、元の文字列と置換のデータ型は互換性のある状態である必要があります。 Oracleと同じまたは暗黙的に変換可能。
arg1が文字値の場合、oracleは置換文字列をarg1と互換性のあるデータ型に変換してから比較し、expr1の文字セットでVARCHAR2を返します。 arg1が数値の場合、Oracleは数値の優先順位が最も高い引数を決定し、他の引数をそのデータ型に暗黙的に変換し、そのデータ型を返します。
従業員がまだどのジョブにも割り当てられていない場合、以下のSELECTステートメントには「n/a」が表示されます。 JOB_IDはNULLです。 それ以外の場合は、実際のJOB_ID値が表示されます。
NVL2
NVLの機能強化として、OracleはNULL列値だけでなくNOT NULL列の値も置換する機能を導入しました。 NVL2関数を使用して、NULL値と非NULL値を代替値で置き換えることができます。
構文:
従業員のJOB_CODEがNULLの場合、以下のSELECTステートメントは「Bench」を表示します。 JOB CODEがnull以外の明確な値の場合、定数値「Job Assigned」が表示されます。
NULLIF
NULLIF関数は、2つの引数expr1とexpr2を比較します。 expr1とexpr2が等しい場合、NULLを返します。それ以外の場合、expr1を返します。 他のNULL処理関数とは異なり、最初の引数はNULLにはできません。
構文:
最初の引数はNULLと評価される式にすることができますが、リテラルNULLにすることはできません。 両方のパラメーターは、関数を実行するために必須です。
以下のクエリは、両方の入力値12が等しいため、NULLを返します。
同様に、以下のクエリは両方の文字列が等しくないため「SUN」を返します。
コーレス
NVLのより一般的な形式であるCOALESCE関数は、引数リストの最初の非ヌル式を返します。 最小2つの必須パラメーターを取りますが、最大引数には制限がありません。
構文:
以下のSELECTクエリを検討してください。 従業員の住所フィールドに入力された最初の非ヌル値を選択します。
興味深いことに、COALESCE関数の機能はIF..ELSIF..ENDIFコンストラクトに似ています。 上記のクエリは次のように書き換えることができます-
条件関数
Oracleには、SQL文でも条件を課すための条件関数DECODEおよびCASEが用意されています。
DECODE関数
この関数は、IF..THEN..ELSE条件付き手続き文とSQLで同等です。 DECODEは、すべてのデータ型の値/列/式で機能します。
構文:
DECODE関数は、式を各検索値と順番に比較します。 式と検索引数が等しい場合、対応する結果を返します。 一致しない場合、定義されている場合はデフォルト値が返され、定義されていない場合はNULLが返されます。 型の互換性が一致しない場合、oracleは暗黙的に潜在的な変換を実行して結果を返します。
実際問題として、OracleはDECODE関数を使用している間、2つのNULLは同等であると見なします。
expressionがnullの場合、Oracleは、nullである最初の検索の結果を返します。 DECODE関数のコンポーネントの最大数は255です。
CASE式
CASE式はDECODEと同じ概念で機能しますが、構文と使用法が異なります。
構文:
Oracle検索は、左から始まり、真の条件が見つかるまで右に移動し、それに関連する結果式を返します。 条件に該当するものが見つからず、ELSE句が存在する場合、Oracleはelseで定義された結果を返します。 それ以外の場合、Oracleはnullを返します。
CASE式の引数の最大数は255です。 単純なCASE式の初期式およびオプションのELSE式を含め、すべての式はこの制限にカウントされます。 それぞれいつ… THENペアは2つの引数としてカウントされます。 この制限を超えないようにするために、return_expr自体がCASE式になるようにCASE式をネストすることができます。