30.5 JSON_VALUE関数ベースの索引とJSON_TABLE問合せの使用
ERROR ON ERRORを指定したjson_valueを使用して作成された索引は、json_tableを含む問合せに使用できます。この場合、この索引が索引付きパスに対する制約として機能することで、JSONデータ内の項目ごとに必ず1つの(非null)スカラーJSON値のみが投影されるようになります。
この方法で索引を使用する場合は、次の各条件が満たされている必要があります。
-
問合せの
WHERE句は、json_tableによって投影される列を参照する。 -
その列のデータ型は、索引定義に使用されたデータ型と一致する。
-
その列を対象とする有効なSQL/JSONパスが、索引付けされたパス式と一致する。
そのため、例30-5の問合せでは、例30-3で作成した索引を使用しています。
ノート:
json_value式またはドット表記法を使用して作成された関数ベースの索引を、問合せでWHERE句が出現するたびに取得できるのは、この発生がSQLの比較条件(>=など)で使用されている場合のみです。特に、これは、条件IS NULLまたはIS NOT NULLで使用される存在としては選択されません。
SQL比較条件の詳細は、Oracle Database SQL言語リファレンスを参照してください。
例30-5 JSON_VALUEファンクション・ベースの索引とJSON_TABLE問合せの使用
列のSQL型NUMBER(5)が索引に使用されている型と一致するため、索引を選択できます。
SELECT jt.*
FROM j_purchaseorder po,
json_table(po.data, '$'
COLUMNS po_number NUMBER(5) PATH '$.PONumber',
reference VARCHAR2(30 CHAR) PATH '$.Reference',
requestor VARCHAR2(32 CHAR) PATH '$.Requestor',
userid VARCHAR2(10 CHAR) PATH '$.User',
costcenter VARCHAR2(16 CHAR) PATH '$.CostCenter') jt
WHERE po_number = 1600;
親トピック: JSONデータの索引