変数参照
構文
variable_reference ::= "$" [id
]
セマンティクス
変数参照式は、指定された変数が現在バインドされている項目を返します。構文的には、変数参照式は変数の名前です。
Oracle NoSQL Databaseでは、外部変数と内部変数の両方を宣言できます。変数とそのスコープの宣言の詳細は、「変数宣言」を参照してください。
表の別名は、基本的に、指定された表の行全体にわたる内部変数です。SELECT式の他の句はFROM句によって生成された行を操作し、一度に1行ずつ処理します。現在処理中の行はコンテキスト行と呼ばれます。コンテキスト行の列は、式で名前によって直接参照することも、後ろにドット文字と列名が続く表の別名で参照することもできます。表の別名がドル記号($)で始まる場合、名前が別名である内部変数の変数宣言として機能します。この内部変数はコンテキスト行全体にバインドされ、SELECT式の副次式内で参照できます。また、関数に引数として渡して、コンテキスト行の結果をフェッチすることもできます。
例6-91 航空手荷物追跡アプリケーション・データから、乗客の到着地空港からの手荷物預かりと手荷物回収の間の時間をフェッチします
SELECT $flightLeg.flightDate AS BAGGAGE_CHECK, $bagInfo.bagArrivalDate AS BAGGAGE_COLLECT,
$t1 AS BAGGAGE_DURATION
FROM BaggageInfo bag, bag.bagInfo[0] AS $bagInfo, $bagInfo.flightLegs[0] AS $flightLeg,
get_duration(timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate)) $t1
WHERE ticketNo=1762320369957
説明: この例では、表の別名と内部変数を使用します。各乗客のbagArrivalDate
とflightDate[0]
の時間差を計算することで、到着地空港での受託時間と手荷物回収時間の間の時間を確認できます。timestamp_diff
関数を使用して時間差を検出し、get_duration
関数を使用して結果をミリ秒から時間文字列に変換します。詳細は、「timestamp_diff関数とget_duration関数」を参照してください。
問合せの表名BaggageInfo
の後に表の別名bagが続きます。変数$bagInfo
および$flightLeg
を使用して、コンテキスト行(現在処理中の行)の列を参照します。bagInfo
はBaggageInfo
表の配列型の列ですが、$bagInfo
はコンテキスト行のbagInfo
配列の最初の要素を保持するために使用される内部変数です。$t1
は、問合せの実行時に値が割り当てられる内部変数です。
ノート:
ここで、timestamp_diff
関数は、問合せの実行時に、文字列からタイムスタンプ・データ型にbagArrivalDate
およびflightDate
を自動的にキャストします。
{"BAGGAGE_CHECK":"2019-03-12T03:00:00Z","BAGGAGE_COLLECT":"2019-03-12T15:05:00Z","BAGGAGE_DURATION":"12
hours 5 minutes"}