18.5 SQL/JSON問合せファンクションで使用される空白フィールド句
SQL/JSON問合せファンクションのjson_value
、json_query
およびjson_table
は、オプションでON EMPTY
句を受け入れます。これは、対象となるJSONフィールドが問合せデータ内にない場合の処理を指定します。この句についてと、デフォルト動作(ON EMPTY
句なし)について説明します。
通常、SQL/JSONファンクションおよび条件のエラーへの対処は、エラー句(ON ERROR
)を使用して行います。しかし、データ内に見つからない特定のJSONフィールドと照合するために問合せるときのように、この通常のエラー処理とは異なる対処が必要な特別なケースがあります。照合するフィールドがないという理由だけでエラーを発生させたくない場合があります。(欠落フィールドは、通常エラーとして扱われます。)
通常は、ON ERROR
句と一緒にNULL ON EMPTY
句を使用します。このように組み合せることにより、通常のエラーはON ERROR
句に従って処理されますが、欠落フィールドの照合を試行した場合のエラーにはNULL
が戻されるだけになります。このときに、ON EMPTY
句がない場合は、ON ERROR
句で欠落フィールドのケースも処理されます。
NULL ON EMPTY
の他に、ERROR ON EMPTY
とDEFAULT
... ON EMPTY
も使用できます。これらは、同様の名前を持つON ERROR
句と類似しています。
ON EMPTY
句のみがある(ON ERROR
句がない)場合、欠落フィールドの動作はON EMPTY
句によって指定され、その他のエラーは、NULL ON ERROR
句がある場合と同じ方法で処理されます(これがON ERROR
のデフォルト)。どちらの句もない場合には、NULL ON ERROR
のみが使用されます。
ノート:
SQL/JSONファンクションjson_value
が、record型または索引付き表型のRETURNING
型が含まれているPL/SQLコードで使用されていると、NULL
が返せなくなります。これらの型は不可分的にNULL
にできないためです。
そのため、NULL ON MISMATCH
句とNULL ON EMPTY
句では、こうしたコレクション型に対してNULL
値を返せません。NULL
が返されることはなく、コンパイル時エラーが発生します。(SQLオブジェクト、VARRAYまたはネストされた表に対するRETURNING
型が含まれたPL/SQLコードの場合、それらの型の値は不可分的にNULL
にできるため、このような例外は存在しません)。
JSON_VALUEで作成された索引に対するNULL ON EMPTYの使用
NULL ON EMPTY
は、json_value
式で作成される関数索引の場合に特に便利です。この句は、索引の選択を行うかどうか、またはいつ行うかへの影響は持ちませんが、json_value
式の対象であるフィールドが欠落しているために索引付けが行われない一部のデータでインデックス付けが行われるようにすることを許可する際に有効です。
索引を移入する問合せには、通常ERROR ON ERROR
を使用することによって、問合せパス式の結果が複数の値や複雑な値になったときはエラーが発生するようにします。しかし、パス式の対象フィールドが欠落しているだけはエラーを発生させずに、そのデータをインデックス付けする場合があります。例30-4は、json_value
式で索引を作成するときのNULL ON EMPTY
のこの使用方法を示しています。