20 SQL/JSONファンクションJSON_VALUE
SQL/JSONファンクションjson_value
は、JSONデータを選択し、SQLスカラーやユーザー定義のSQLオブジェクト型またはSQLコレクション型(VARRAY、ネストした表)のインスタンスを返します。
-
json_value
が単一のスカラーJSON値を対象にする場合、対応するスカラーSQL値を返します。返されるスカラー値のSQLデータ型を指定できます。デフォルトは、VARCHAR2(4000)
です。json_value
の対象がJSONスカラー値null
である場合は、SQLの戻り型がどれであってもSQLのNULL
が返されます。(たとえば、デフォルトの戻り型VARCHAR2(4000)
の場合に、SQL文字列'null'
は返されません。)つまり、特に、json_value
を使用してJSON値null
と値が存在しないことの区別はできません。この場合、SQLのNULL
は両方の事例を表します。 -
json_value
がJSON配列を対象にしている場合、SQLコレクション型(VARRAYまたはネストした表)を戻り型として指定すると、json_value
はそのコレクション型のインスタンスを返します。対象のJSON配列の要素は、返されたコレクション型インスタンスの要素を提供します。スカラーのJSON配列要素は、返されたコレクション・インスタンスにスカラーのSQL値を生成します(前を参照)。オブジェクトであるJSON配列要素(次を参照)または配列は再帰的に処理されます。
-
json_value
がJSONオブジェクトを対象にしている場合、ユーザー定義のSQLオブジェクト型を戻り型として指定すると、json_value
はそのオブジェクト型のインスタンスを返します。対象のJSONオブジェクトのフィールド値は、返されたオブジェクト型インスタンスの属性値を提供します。対象のJSONオブジェクトのフィールド名は、SQLオブジェクト属性のSQL名と比較されます。スカラー・フィールド値は、返されたオブジェクト型インスタンスにスカラーのSQL値を生成します(前を参照)。配列であるフィールド値(前を参照)またはオブジェクトが再帰的に処理されます。
最終的に、これはスカラーのSQLオブジェクト属性の名前と比較されるスカラー値を持つJSONフィールドの名前です。大/小文字を区別して名前が正確に一致しない場合は、問合せコンパイル時に不一致エラーが処理されます。
また、json_value
を使用して、JSONデータで使用する関数ベースのBツリー索引を作成することもできます。JSONデータの索引を参照してください。
ファンクションjson_value
には、必須の引数が2つあり、いくつかのオプションの句を受け入れます。
json_value
の最初の引数は、スカラーのSQLデータ型のインスタンスを戻すSQL式です(つまり、オブジェクト・データ型でもコレクション・データ型でもありません)。json_value
から返されるスカラー値のデータ型は、BINARY_DOUBLE
、BINARY_FLOAT
、BOOLEAN
、CHAR
、CLOB
、DATE
、INTERVAL DAY TO SECOND
、INTERVAL YEAR TO MONTH
、NCHAR
、NCLOB
、NVARCHAR2
、NUMBER
、RAW
脚注1、SDO_GEOMETRY
、TIMESTAMP
、TIMESTAMP WITH TIME ZONE
、VARCHAR2
およびVECTOR
のいずれかにすることができます。
RETURNING
の型がVECTOR
の場合、動作は対象となる入力データに応じて次のように異なります:
-
対象となるデータがJSONスカラー・ベクター値の場合、その値は
VECTOR
インスタンスとして返されます。 -
対象となるデータが数値要素のみを含むJSON配列の場合、配列は
VECTOR
インスタンスに変換され、それが返されます。 -
対象となるデータがその他のJSON値(つまり、非ベクター・スカラー、数値以外の要素を含む配列、またはオブジェクト)である場合、エラーが発生します。
ノート:
一般に、JSON文字列からNVARCHAR2
、NCLOB
およびNCHAR
以外の型のSQL文字データを生成し、その変換先データ型の文字セットがUnicodeベースでない場合、その変換において、そのSQL型の文字セットで表せない文字については文字セット変換で情報の損失が発生する可能性があります。
最初の引数は、適切にキャストされた表またはビューの列の値、PL/SQL変数、バインド変数のいずれかになります。SQL式の評価の結果は、パス式を評価するためのコンテキスト項目として使用されます。
json_value
の2番目の引数はSQL/JSONパス式であり、その後にはオプションの句RETURNING
、PASSING
、ON ERROR
、ON EMPTY
およびON MISMATCH
が続きます。このパス式では単一のスカラー値を対象とする必要があり、そうでない場合、エラーが発生します。
デフォルトのエラー処理動作はNULL ON ERROR
であり、これは、エラーが発生しても値が戻されない、つまり、エラーが発生しないことを意味します。特に、パス式が配列などの非スカラー値を対象としている場合、デフォルトではエラーは発生しません。エラーが発生するようにするには、ERROR ON ERROR
を使用します。
パス式配列ステップで、指定されている位置が1つのみである場合、データと照合されます。それ以外の場合は一致しません(デフォルトではNULL
が返されます)。
ノート:
特定のJSONオブジェクト内のフィールド名は、それぞれが一意である必要はありません。同じフィールド名を繰り返すことができます。Oracle Databaseで行われるストリーム評価では、特定のフィールド名を持つ1つのオブジェクト・メンバーのみが常に使用され、同じフィールド名を持つ他のメンバーは無視されます。このような複数のメンバーのうちどれが使用されるかは指定されていません。
JSONオブジェクトの一意フィールドと重複フィールドを参照してください。
_________________________________________________________
関連項目:
json_value
の詳細は、Oracle Database SQL言語リファレンスを参照してください。
- 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を使用したユーザー定義オブジェクト型またはコレクション型インスタンスのインスタンス化
SQL/JSONファンクションjson_value
を使用すると、ユーザー定義のSQLオブジェクト型またはコレクション型のインスタンスをインスタンス化できます。これを行うには、パス式にJSONオブジェクトまたは配列を指定し、RETURNING
句でオブジェクト型またはコレクション型をそれぞれ指定します。 - JSON_TABLEとしてのJSON_VALUE
SQL/JSONファンクションjson_value
は、ファンクションjson_table
の特別な事例であるとみなすことができます。
関連トピック
親トピック: JSONデータの問合せ
脚注の凡例
脚注1: 入力データがJSON
データ型であり、基になるJSON言語スカラー型がバイナリである場合のみ、戻り型としてRAW
を使用できます。それ以外の場合は、エラーが処理(対処)されます。