20.1 SQL/JSONファンクションJSON_VALUEとブール型のJSON値の使用
JSONには、ブール型の値trueおよびfalseがあります。SQL/JSONファンクションjson_valueによってパス式がJSONのtrueまたはfalseに評価されると、BOOLEAN値またはVARCHAR2値('true'または'false')か、NUMBER値(trueの場合は1、falseの場合は0)を返すことができます。
デフォルトでは、json_valueは文字列VARCHAR2 (文字列)値を返します。ターゲット・データがJSONのブール値の場合、デフォルトでは、文字列の値'true'または'false'が返されます。例20-1に、これを示します。この問合せは'true'を返します。
RETURNING句を使用すると、戻りデータ型を指定できます。例20-2に、SQLのBOOLEAN値(trueまたはfalse)を返すためのRETURNING BOOLEANの使用を示します。この問合せは、trueを返します。例20-3に、PL/SQLの場合の同じ内容を示すとともに、ERROR ON ERROR句の使用を示します。
デフォルトでは、ターゲット・データがJSONのブール値の場合、RETURNING NUMBERによってエラーが発生します。ただし、句ALLOW BOOLEAN TO NUMBER CONVERSIONを含めると、エラーは発生しません。その場合、trueのJSON値に対して1が返され、false値に対して0が返されます。例20-4に、これを示します。この問合せは1を返します。
SQL/JSONファンクションjson_tableは、json_valueなどの他のSQL/JSON問合せファンクションを一般化します。これを使用してJSONのブール値を投影する場合、json_valueが暗黙的に使用され、生成されるSQL値はデフォルトでVARCHAR2値として返されます。したがって、デフォルトでは投影列のデータ型はVARCHAR2です。
ただし、json_valueの場合と同様に、JSONのブール値はBOOLEAN値として投影できます。また、列にNUMBERデータ型を指定して、ALLOW BOOLEAN TO NUMBER CONVERSION句を含めることで、NUMBER値として投影できます。
例20-1 JSON_VALUE: VARCHAR2として返されるJSONのブール値
VARCHAR2を返すことは、json_valueファンクションのデフォルト動作です。
SELECT json_value(data, '$.AllowPartialShipment')
FROM j_purchaseorder;例20-2 JSON_VALUE: BOOLEANとしてSQLに返されるJSONのブール値
この例では、ブールJSONデータに応じたSQL BOOLEAN値を返します。(BOOLEANデータ型は、リリース23ai以降のOracle SQLで使用できます。)
SELECT json_value(data, '$.AllowPartialShipment'
RETURNING BOOLEAN)
FROM j_purchaseorder;
例20-3 JSON_VALUE: BOOLEANとしてPL/SQLに返されるJSONのブール値
この例では、句ERROR ON ERRORを使用して、エラーがあった場合にエラーを発生します。(その後、ユーザーの例外処理コードがエラーを処理できます。)
DECLARE
b BOOLEAN;
jdata CLOB;
BEGIN
SELECT data INTO jdata FROM j_purchaseorder
WHERE rownum = 1;
b := json_value(jdata, '$.AllowPartialShipment'
RETURNING BOOLEAN
ERROR ON ERROR);
END;
/
例20-4 JSON_VALUE: NUMBERとしてSQLに返されるJSONのブール値
この例では、句ALLOW BOOLEAN TO NUMBER CONVERSIONを使用してSQLのNUMBER値1 (true)を返します。この句を指定しないと、RETURNING NUMBERによってブール型のJSONデータのエラーが発生します。
SELECT json_value(data, '$.AllowPartialShipment'
RETURNING NUMBER
ALLOW BOOLEAN TO NUMBER CONVERSION)
FROM j_purchaseorder;