24.11 データ・ガイドの問合せ

データ・ガイドは、一連のJSON文書に関する情報です。Oracle SQLファンクションjson_dataguideまたはPL/SQLファンクションDBMS_JSON.get_index_dataguideのいずれかを使用することで、取得するフラット・データ・ガイドからの情報を問合せられます。後者の場合、データ・ガイド対応JSON検索索引が、JSONデータ上で定義されている必要があります。

関連項目:

例24-20 JSON_DATAGUIDEを使用して取得したデータ・ガイドの問合せ

この例は、SQL/JSONファンクションjson_dataguideを使用して、フラット・データ・ガイドを取得します。次に、SQL/JSONファンクションjson_tableによってフィールドo:pathtypeo:lengthから即時に投影された関係する列を問い合せます。投影された列を、作成されたパス列jpathを基準として辞書順に返します。

DBMS_JSON.GATHER_STATSjson_dataguideの3番目の引数に含まれている場合、返されるデータ・ガイドには統計フィールドも含まれます。

WITH dg_t AS (SELECT json_dataguide(data) dg_doc
                FROM j_purchaseorder)
  SELECT jt.*
    FROM dg_t,
         json_table(dg_doc, '$[*]'
           COLUMNS
             jpath   VARCHAR2(40) PATH '$."o:path"',
             type    VARCHAR2(10) PATH '$."type"',
             tlength NUMBER       PATH '$."o:length"') jt
   ORDER BY jt.jpath;

JPATH                                    TYPE          TLENGTH
---------------------------------------- ------------- -------
$."Special Instructions"                 string              8
$.AllowPartialShipment                   boolean             4
$.CostCenter                             string              4
$.LineItems                              array             512
$.LineItems.ItemNumber                   number              1
$.LineItems.Part                         object            128
$.LineItems.Part.Description             string             32
$.LineItems.Part.UPCCode                 number             16
$.LineItems.Part.UnitPrice               number              8
$.LineItems.Quantity                     number              4
$.PONumber                               number              4
$.PO_LineItems                           array              64
$.Reference                              string             16
$.Requestor                              string             16
$.ShippingInstructions                   object            256
$.ShippingInstructions.Address           object            128
$.ShippingInstructions.Address.city      string             32
$.ShippingInstructions.Address.country   string             32
$.ShippingInstructions.Address.state     string              2
$.ShippingInstructions.Address.street    string             32
$.ShippingInstructions.Address.zipCode   number              8
$.ShippingInstructions.Phone             array             128
$.ShippingInstructions.Phone             string             16
$.ShippingInstructions.Phone.number      string             16
$.ShippingInstructions.Phone.type        string              8
$.ShippingInstructions.name              string             16
$.User                                   string              8

例24-21 最小頻度が80%のパスに対する索引データを使用したデータ・ガイドの問合せ

この例では、PL/SQLファンクションDBMS_JSON.get_index_dataguideを形式の値DBMS_JSON.FORMAT_FLATと一緒に使用して、データ・ガイド対応JSON検索索引に格納されているデータ・ガイド情報からフラット・データ・ガイドを取得します。次に、フィールドo:pathtypeo:lengtho:frequencyからSQL/JSONファンクションjson_tableによって即時に投影された関係する列を問い合せます。

フィールドo:frequencyの値は、文書セット全体で、文書内の各フィールドの発生頻度を記録する統計情報です。文書セットに関して統計情報が収集された場合にのみ、使用できます。所定のフィールドの頻度は、そのフィールドを含む文書数をJSON列内の合計文書数で割った値が割合で表されます。

WITH dg_t AS
  (SELECT DBMS_JSON.get_index_dataguide('J_PURCHASEORDER',
                                        'DATA',
                                        DBMS_JSON.FORMAT_FLAT) dg_doc

    FROM DUAL)
 SELECT jt.*
   FROM dg_t,
        json_table(dg_doc, '$[*]'
          COLUMNS
            jpath     VARCHAR2(40) PATH '$."o:path"',
            type      VARCHAR2(10) PATH '$."type"',
            tlength   NUMBER       PATH '$."o:length"',
            frequency NUMBER       PATH '$."o:frequency"') jt
   WHERE jt.frequency > 80;

JPATH                                    TYPE          TLENGTH  FREQUENCY
---------------------------------------- ------------- -------- ---------
$.User                                   string              8        100
$.PONumber                               number              4        100
$.LineItems                              array             512        100
$.LineItems.Part                         object            128        100
$.LineItems.Part.UPCCode                 number             16        100
$.LineItems.Part.UnitPrice               number              8        100
$.LineItems.Part.Description             string             32        100
$.LineItems.Quantity                     number              4        100
$.LineItems.ItemNumber                   number              1        100
$.Reference                              string             16        100
$.Requestor                              string             16        100
$.CostCenter                             string              4        100
$.ShippingInstructions                   object            256        100
$.ShippingInstructions.name              string             16        100
$.ShippingInstructions.Address           object            128        100
$.ShippingInstructions.Address.city      string             32        100
$.ShippingInstructions.Address.state     string              2        100
$.ShippingInstructions.Address.street    string             32        100
$.ShippingInstructions.Address.country   string             32        100
$.ShippingInstructions.Address.zipCode   number              8        100
$."Special Instructions"                 string              8        100