ネストされたデータ型の操作
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つのステップで実行されます。
$bag.bagInfo[].flightLegs[0].values()は、flightLegs配列の最初のレコードのすべてのエントリを示します。これには、actions配列が含まれます。これを(values()を使用して)繰り返し、次に示すようにactions配列のすべてのレコードを取得できます。$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説明: 前述の問合せは次のステップを使用して処理されます。
$bagDet.bagInfo[].flightLegs[0].values()は、flightLegs配列の最初のレコードのすべてのエントリを示します。bagInfo[].flightLegs[0].values())[2]は、flightLegs配列の最初の要素内のactions配列の3番目(最後)のレコードを示します。- actions配列に複数のレコードがあります。
bagInfo[].flightLegs[0].values())[2].actionCodeは、actionCode要素に対応する値をフェッチします。
出力:
{"fullName":"Mary Watson","lastTransit_Update":"Checkin at YYZ"}ノート:
後の項で、size関数を使用して配列索引をハードコードすることなく、一般的な方法で同じ問合せを記述する方法について学習します。「複合データ型のサイズの検索」を参照してください。