ネストされたデータ型の操作

Oracle NoSQL Databaseは、ネストされたデータ型をサポートしています。つまり、あるデータ型を別のデータ型内に含めることができます。たとえば、配列内のレコード、配列内の配列などです。サンプルのBaggageinfoスキーマでは、配列の配列のネストされたデータ型を使用します。

例1: チケット番号が1762330498104の乗客について、第1区間で実行された様々なアクションをフェッチします。
SELECT bagDet.fullName, bagDet.bagInfo[].flightLegs[0].values().values() AS Action
FROM BaggageInfo bagDet WHERE ticketNo=1762330498104
説明: 前述の問合せでは、flightLegsはネストされたデータ型です。この配列には、レコードの配列であるactions配列があります。前述の問合せは2つのステップで実行されます。
  1. $bag.bagInfo[].flightLegs[0].values()は、flightLegs配列の最初のレコードのすべてのエントリを示します。これには、actions配列が含まれます。これを(values()を使用して)繰り返し、次に示すようにactions配列のすべてのレコードを取得できます。
  2. $bag.bagInfo[].flightLegs[0].values().values()は、actions配列のすべてのレコードを示します。
出力:
{"fullName":"Michelle Payne",
"Action":["SFO","ONLOAD to IST","2019-02-02T12:10:00Z","SFO",
"BagTag Scan at SFO","2019-02-02T11:47:00Z","SFO",
"Checkin at SFO","2019-02-02T10:01:00Z"]}
例2: チケット番号が1762340683564の乗客について、第1区間で実行された最後のトランジット・アクションの更新の詳細を表示します。
SELECT bagDet.fullName, (bagDet.bagInfo[].flightLegs[0].values())[2].actionCode
AS lastTransit_Update FROM BaggageInfo bagDet WHERE ticketNo=1762340683564
説明: 前述の問合せは次のステップを使用して処理されます。
  1. $bagDet.bagInfo[].flightLegs[0].values()は、flightLegs配列の最初のレコードのすべてのエントリを示します。
  2. bagInfo[].flightLegs[0].values())[2]は、flightLegs配列の最初の要素内のactions配列の3番目(最後)のレコードを示します。
  3. actions配列に複数のレコードがあります。bagInfo[].flightLegs[0].values())[2].actionCodeは、actionCode要素に対応する値をフェッチします。
出力:
{"fullName":"Mary Watson","lastTransit_Update":"Checkin at YYZ"}

ノート:

後の項で、size関数を使用して配列索引をハードコードすることなく、一般的な方法で同じ問合せを記述する方法について学習します。「複合データ型のサイズの検索」を参照してください。