JSONオブジェクト・アクセス式
JSONオブジェクト・アクセス式は、JSONデータの列を問い合せる場合にのみ使用されます。そのデータ内の1つ以上のJSON値を含む文字列を戻します。このタイプの式の構文は、ドット表記法構文といいます。
JSON_object_access_expr::=
array_step::=
-
table_alias
では、JSONデータの列を含む表の別名を指定します。この表の別名が必要であり、SQL文で表に割り当てる必要があります。 -
JSON_column
では、JSONデータの列の名前を指定します。列のデータ型はVARCHAR2
、CLOB
、BLOB
またはJSON
である必要があります。列がJSON生成ファンクション(
JSON_QUERY
またはTREAT
)の結果である場合、その列にはJSON
データ型のデータを格納できます。JSON
型以外のデータ型を識別する場合、列にIS JSON
チェック制約を定義できます。 -
1つ以上のJSONオブジェクト・キーをオプションで指定できます。オブジェクト・キーによって、JSONデータの特定のJSON値を特定できます。最初の
JSON_object_key
は、JSONデータのトップレベルのオブジェクト・メンバーのキー(プロパティ)名と大/小文字を区別して一致する必要があります。オブジェクト・メンバーの値が別のJSONオブジェクトである場合、オブジェクトのメンバーのキー名と一致する2番目のJSON_object_key
を指定でき、以降も同様です。これらの反復中にJSON配列が検出され、array_step
を指定しない場合、配列が暗黙的にアンラップされ、配列の要素がJSON_object_key
を使用して評価されます。 -
JSON値が配列の場合、オプションで1つ以上の
array_step
句を指定できます。これにより、JSON配列の特定の要素にアクセスできます。-
integer
を使用して、JSON配列の索引integer
の要素を指定します。integer
TO
integer
を使用して、2つのinteger
索引値の間(これらの値を含む)の要素の範囲を指定します。指定された要素が評価されるJSON配列にある場合、配列ステップはそれらの要素と一致する結果になります。それ以外の場合、一致しない配列ステップになります。JSON配列の最初の要素は索引0です。 -
ワイルド・カード記号であるアスタリスク(
*
)を使用して、JSON配列のすべての要素を指定します。評価されるJSON配列に少なくとも1つの要素が含まれる場合、JSON配列のすべての要素が一致する配列ステップになります。それ以外の場合、一致しない配列ステップになります。
-
JSONオブジェクト・アクセス式は、次のようなターゲットJSON値を含むデータ型VARCHAR2(4000)
の文字列を戻します。
-
単一のターゲット値の場合、文字列には、JSONスカラー値、オブジェクト、配列に関係なくその値が含まれます。
-
複数のターゲット値の場合、文字列には、要素がそれらの値であるJSON配列が含まれます。
JSON_object_key
を省略すると、この式は全体のJSONデータを含む文字列を戻します。この場合、文字列は、問い合せるJSONデータの列と同じデータ型です。
JSONオブジェクト・アクセス式は、4KBを超える値を返せません。値がこの制限を超えると、式はnullを返します。実際の値を取得するには、かわりにJSON_QUERY関数またはJSON_VALUE関数を使用して、RETURNING
句に適切な戻り型を指定します。
JSONオブジェクト・アクセス式の照合導出ルールは、JSON_QUERY
ファンクションのものと同じです。
関連項目:
JSON_QUERY
ファンクションの照合導出ルールは、『Oracle Databaseグローバリゼーション・サポート・ガイド』の付録Cを参照してください。
例
次の例では、JSONドキュメントを含む表の作成: 例で作成されるj_purchaseorder
表を使用します。この表には、po_document
と呼ばれるJSONデータの列が含まれます。これらの例では、列po_document
からJSON値を戻します。
次の文は、PONumber
というキー名のプロパティの値を返します。戻り値の1600はSQLの番号です。
SELECT po.po_document.PONumber.number() FROM j_purchaseorder po; PONumber -------- 1600
次の文は、値がJSONオブジェクトであるキー名ShippingInstructions
を使用したプロパティを最初に対象とします。この文は、そのオブジェクト内のキー名Phone
を使用したプロパティを対象とします。この文は、JSON配列であるPhone
の値を戻します。
SELECT po.po_document.ShippingInstructions.Phone FROM j_purchaseorder po; SHIPPINGINSTRUCTIONS ------------------------------------------------------------------------------------- [{"type":"Office","number":"909-555-7307"},{"type":"Mobile","number":"415-555-1234"}]
次の文は、値がJSON配列であるキー名LineItems
を使用したプロパティを最初に対象とします。この式は配列を暗黙的にアンラップし、JSONオブジェクトである要素を評価します。次に、この文は、アンラップされたオブジェクト内のキー名Part
を使用したプロパティを対象とし、2つのオブジェクトを確認します。この文は、それらのオブジェクト内のキー名Description
を使用したプロパティを対象とし、文字列値を確認します。複数の値が戻されるため、値はJSON配列の要素として戻されます。
SELECT po.po_document.LineItems.Part.Description FROM j_purchaseorder po; LINEITEMS ----------------------------------- [One Magic Christmas,Lethal Weapon]
関連項目:
ドット表記法構文を使用したJSONデータの問合せの詳細は、Oracle Database JSON開発者ガイドを参照してください。