説明
JSON_QUERY()関数は、JSONデータから1つまたは複数の値を照会し、これらの値を返します。
構文
JSON_QUERY(
expr [FORMAT JSON],
json_path_literal
[RETURNING CLOB|BLOB|JSON|VARCHAR2|VARCHAR2[size],]
[ALLOW|DISALLOW SCALARS]
[PRETTY]
[ASCII]
[WITHOUT [ARRAY] WRAPPER, WITH CONDITIONAL|UNCONDITIONAL [ARRAY] WRAPPER]
[ERROR|NULL|EMPTY|EMTPY ARRAY|EMPTY OBJECT ON ERROR]
[ERROR|NULL|EMPTY|EMTPY ARRAY|EMPTY OBJECT ON EMPTY]);
構文の説明
JSON_QUERY()関数の構文は以下のとおりです:
[RETURNING CLOB | BLOB | JSON | VARCHAR2 | VARCHAR2[size]:返される値のタイプを指定します。ここでVARCHAR2[size]は、返される値の長さを制限できます。デフォルトの返却タイプは入力データ型によって決まります。入力がJSONの場合、出力タイプもJSONになります。入力タイプがVARCHARの場合、デフォルトの出力タイプはVARCHARです。FORMAT JSON:オプションです。exprのデータ型がBLOBの場合、この句を使用する必要があります。json_path_literal: 照会するパスを指定します。PRETTY: 文字列型を返す際に、文字列出力のpretty-printを使用するかどうかを指定します。ASCII: 標準ASCII Unicodeエスケープシーケンスを使用して、返される文字列内の非ASCII Unicode文字を自動的にエスケープします。WITHOUT WRAPPER:ARRAY WRAPPER機能を無視します。WITH WRAPPER:ARRAY WRAPPER機能を使用します。WITH UNCONDITIONAL WRAPPER:WITH WRAPPERと同じです。WITH CONDITIONAL WRAPPER: 複数の値を返す場合にARRAY WRAPPERを使用し、単一の値の場合はARRAY WRAPPERを無視します。ERROR句:NULL ON ERRORエラー発生時にNULLを返します。これがデフォルト設定です。ERROR ON ERRORエラー発生時に対応するOracleエラーを返します。EMPTY ON ERRORこの句を指定することは、EMPTY ARRAY ON ERRORを指定することと同じです。EMPTY ARRAY ON ERRORエラー発生時に空のJSON配列を返します。EMPTY OBJECT ON ERRORエラー発生時に空のJSONオブジェクトを返します。
EMPTY句:NULL ON EMPTYマッチングアイテムが見つからない場合にNULLを返します。これがデフォルト設定です。ERROR ON EMPTYマッチングアイテムが見つからない場合に対応するOracleエラーを返します。EMPTY ON EMPTYこの句を指定することは、EMPTY ARRAY ON EMPTYを指定することと同じです。EMPTY ARRAY ON EMPTYマッチングアイテムが見つからない場合に空のJSON配列を返します。EMPTY OBJECT ON EMPTYマッチングアイテムが見つからない場合に空のJSONオブジェクトを返します。
例
# RETURNING句を使用する
obclient> SELECT JSON_QUERY('{"a":100, "b":200, "c":300}', '$') AS value FROM DUAL;
+--------------------------------+
| VALUE |
+--------------------------------+
| {"a": 100, "b": 200, "c": 300} |
+--------------------------------+
1 row in set
obclient>SELECT JSON_QUERY('{"a":100, "b":200, "c":300}', '$' RETURNING CLOB) FROM DUAL;
+----------------------------------------------------------+
| JSON_QUERY('{"A":100,"B":200,"C":300}','$'RETURNINGCLOB) |
+----------------------------------------------------------+
| {"a": 100, "b": 200, "c": 300} |
+----------------------------------------------------------+
1 row in set
obclient> SELECT JSON_QUERY('{"a":100, "b":200, "c":300}', '$' RETURNING VARCHAR2(200)) FROM DUAL;
+-------------------------------------------------------------------+
| JSON_QUERY('{"A":100,"B":200,"C":300}','$'RETURNINGVARCHAR2(200)) |
+-------------------------------------------------------------------+
| {"a": 100, "b": 200, "c": 300} |
+-------------------------------------------------------------------+
1 row in set
obclient> SELECT JSON_QUERY('{"a":100, "b":200, "c":300}', '$' RETURNING BLOB) FROM DUAL;
+----------------------------------------------------------+
| JSON_QUERY('{"A":100,"B":200,"C":300}','$'RETURNINGBLOB) |
+----------------------------------------------------------+
| {"a": 100, "b": 200, "c": 300} |
+----------------------------------------------------------+
1 row in set
obclient> SELECT JSON_QUERY('{"a":100, "b":200, "c":300}', '$' RETURNING JSON) FROM DUAL;
+----------------------------------------------------------+
| JSON_QUERY('{"A":100,"B":200,"C":300}','$'RETURNINGJSON) |
+----------------------------------------------------------+
| {"a": 100, "b": 200, "c": 300} |
+----------------------------------------------------------+
1 row in set
# WRAPPER句とERROR句を使用する
obclient> SET @col_json = '[1,2]';
obclient> SELECT JSON_QUERY(@col_json, '$[0 to 10]' RETURNING JSON WITH WRAPPER EMPTY ON ERROR) FROM DUAL;
+----------------------------------------------------------------------+
| JSON_QUERY(@COL_JSON,'$[0TO10]'RETURNINGJSONWITHWRAPPEREMPTYONERROR) |
+----------------------------------------------------------------------+
| [1, 2] |
+----------------------------------------------------------------------+
1 row in set
# ARRAY WRAPPER句を使用する
obclient> SELECT JSON_QUERY(treat('{"a":100, "b":200, "c":300}' as json), '$' WITH ARRAY WRAPPER) AS value FROM DUAL;
+----------------------------------+
| VALUE |
+----------------------------------+
| [{"a": 100, "b": 200, "c": 300}] |
+----------------------------------+
1 row in set
# DISALLOW SCALAR句を使用する
obclient> SELECT JSON_QUERY('"aaa"', '$' DISALLOW SCALARS ) FROM DUAL;
+----------------------------------------+
| JSON_QUERY('"AAA"','$'DISALLOWSCALARS) |
+----------------------------------------+
| NULL |
+----------------------------------------+
1 row in set
# EMPTY OBJECT/EMPTY ARRAY ON NULL句を使用する
obclient>SELECT JSON_QUERY '{}' AS value FROM DUAL;
+-------+
| VALUE |
+-------+
| {} |
+-------+
1 row in set
obclient>SELECT JSON_QUERY '{}' AS value FROM DUAL;
+-------+
| VALUE |
+-------+
| [] |
+-------+
1 row in set