順序

順序は、一連の0 (ゼロ)個以上の項目です。すべての式は、0 (ゼロ)個以上の入力順序を処理し、結果として出力順序を生成します。

順序は、単に0 (ゼロ)個以上の項目のコレクション・セットです(NULLを含む)。順序は、項目自体(ネストされた順序がない)でもコンテナでもありません。順序を表すパブリックAPIレベル(または内部)に永続データ構造またはjavaクラスのいずれもありません。通常、式は順序の項目を反復することで順序を処理します。

ノート:

配列は一連の項目ではありません。かわりに、中に他の項目が含まれる項目であっても、これは単一の項目です。したがって、配列は項目のコンテナです。

一般に、Oracle NoSQL Databaseの式は順序を処理して順序を生成しますが、その多くは、順序が受け入れるか生成する順序のカーディナリティに制限を設定します。たとえば、複数の式はスカラーです。つまり、入力順序に含まれる項目が1つのみであることと、2つ以上の項目の順序を生成しないことが必要です。単一の項目は、その単一の項目のみを含む順序と同等であるとみなされることに注意してください。

順序のボックス化およびボックス化解除

式Eによって生成された順序は、配列コンストラクタを使用してEをラップする([ E ])ことにより、配列に変換できます。配列コンストラクタとマップの項を参照してください。これは、順序のボックス化と呼ばれます。逆に、配列をボックス化解除する式があります。このような式は、配列に含まれる項目のすべてまたは一部を選択して、これらの項目を順序として返します。配列の暗黙的なボックス化解除は行われません。ボックス化解除を実行するには、必ず式を適用する必要があります。ほとんどの場合、順序のボックス化も明示的に実行する必要があります。つまり、問合せ作成者が配列コンストラクタを使用する必要があります。ただし、ボックス化が暗黙的に行われる場合、つまり、式(配列コンストラクタではない)によって入力順序が配列に変換される場合があります。

ノート:

標準SQLでは、式とは、スカラー式、つまり厳密に1つの(アトミックな)項目を返す式を意味します。複数の項目(または0 (ゼロ)個の項目)を生成できる操作は、問合せブロック(トップレベルの問合せまたは副問合せのいずれか)と、結合、交差などの集合演算子(これらの場合、項目はタプル)のみです。Oracle NoSQL Databaseでも、ほとんどの式はスカラーです。標準SQLの問合せブロックと同様に、Oracle NoSQL Databaseのselect-form-where式は、一連の項目を返します。ただし、ナビゲートして複雑な階層データから情報を抽出するために、Oracle NoSQL Databaseにはパス式も含まれます。パス式の項を参照してください。パス式は、Oracle NoSQL Databaseの複数項目の順序の他のメイン・ソースです。ただし、パス式が副問合せとして表示される場合、Oracle NoSQL Databaseモデルは標準SQLとそれほど違いはありません。

例に従って使用する場合は、例で使用する表の説明に従って航空会社アプリケーション表を作成し、データを挿入します。

例6-2 荷物到着日が2019-03-01T13:00:00Zより後のすべての荷物の乗客名およびタグ番号のフェッチ

SELECT fullname, 
bag.bagInfo[].tagNum
FROM BaggageInfo bag 
WHERE bag.bagInfo[].bagArrivalDate >any "2019-03-01T13:00:00Z"

説明: 航空会社アプリケーションでは、乗客がチェックインした手荷物に一意のタグ番号が関連付けられます。BaggageInfo表では、タグ番号はbagInfo配列のtagnumフィールドに格納されます。乗客に複数の荷物がある場合、baginfo配列には複数の要素があり、各荷物のタグ番号は一意です。

この問合せでは、荷物到着日が指定値より後である、このようなすべての荷物の完全名およびタグ番号をフェッチします。bagArrivalDateフィールドは、各荷物の到着日をISO-8601形式で保持する文字列です。各荷物の到着日と入力日付値(これもISO-8601形式の文字列です)を比較します。追加の手荷物がある乗客の場合は、関連するすべてのタグ番号がリストされます。SELECT式のSELECT句、FROM句およびWHERE句を使用して、表から列を選択します。

ここで、bagBaggageInfo表の別名で、SELECT文のどこでも使用できます。bag.bagInfo[].bagArrivalDateは、複数の項目の順序です。比較演算子を使用して順序を複数の項目と比較すると、エラーが返されます。したがって、順序比較演算子>anyを使用して、順序を必要な到着日と比較します。順序比較の詳細は、順序比較演算子を参照してください。この例では、タイムスタンプ・データ型にキャストしなくても、文字列の自然なソート順序のためにISO-8601形式の文字列形式の日付を比較できます。

出力:
{"fullname":"Elane Lemons","tagNum":"1765780623244"}
{"fullname":"Omar Harvey","tagNum":"17657806234185"}
{"fullname":"Henry Jenkins","tagNum":"17657806216554"}
{"fullname":"Kendal Biddle","tagNum":"17657806296887"}
{"fullname":"Mary Watson","tagNum":"17657806299833"}
{"fullname":"Gerard Greene","tagNum":"1765780626568"}
{"fullname":"Dierdre Amador","tagNum":"17657806240229"}
{"fullname":"Lorenzo Phil","tagNum":["17657806240001","17657806340001"]}
{"fullname":"Lucinda Beckman","tagNum":"17657806240001"}
{"fullname":"Doris Martin","tagNum":"17657806232501"}