ヘッダーをスキップ
Oracle® CEP CQL 言語リファレンス
11g リリース 1 (11.1.1)
B55504-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

3 擬似列

擬似列はストリーム要素と同じように動作しますが、実際にはタプルの一部ではありません。

3.1 擬似列の概要

擬似列からの選択はできますが、値の変更はできません。擬似列は引数のない関数にも似ています (節 1.1.9「関数」を参照)。

Oracle CQL では、以下の擬似列がサポートされています。

3.2 ELEMENT_TIME 擬似列

ELEMENT_TIME 擬似列は、指定のストリーム要素に関連付けられたタイムスタンプ値を java.lang.Math.Bigint(Long) として返します。

構文については、pseudo_column::= を参照してください。

例 3-1 は、select 文で ELEMENT_TIME 擬似列を使用する方法を示します。ストリーム S1 にはスキーマ (c1 integer) があります。例 3-2 に示す入力ストリームがある場合、例 3-3 に示す結果がこのクエリで返されます。関数 to_timestamp を使用して Long 値をタイムスタンプ値に変換しています。

例 3-1 Select 文の ELEMENT_TIME 擬似列

<query id="q4"><![CDATA[ 
    select 
        c1, 
        to_timestamp(element_time) 
    from 
        S1[range 10000000 nanoseconds slide 10000000 nanoseconds]
]]></query>

例 3-2 入力ストリーム

Timestamp   Tuple
 8000       80
 9000       90
13000       130
15000       150
23000       230
25000       250

例 3-3 出力リレーション

Timestamp   Tuple Kind  Tuple
 8000       +           80,12/31/1969 17:00:08
 8010       -           80,12/31/1969 17:00:08
 9000       +           90,12/31/1969 17:00:09
 9010       -           90,12/31/1969 17:00:09
13000       +           130,12/31/1969 17:00:13
13010       -           130,12/31/1969 17:00:13
15000       +           150,12/31/1969 17:00:15
15010       -           150,12/31/1969 17:00:15
23000       +           230,12/31/1969 17:00:23
23010       -           230,12/31/1969 17:00:23
25000       +           250,12/31/1969 17:00:25
25010       -           250,12/31/1969 17:00:25

例 3-4 は、pattern クエリで ELEMENT_TIME 擬似列を使用する方法を示します。Nth.status の値が >= F.status であり、そのタプルの Nth.ELEMENT_TIME 値と最後に F に一致したタプルとの差が java.lang.Math.Bigint(Long) として指定された間隔に満たない場合、タプルまたはイベントは相関変数 Nth に一致します。

例 3-4 Pattern の ELEMENT_TIME 擬似列

...
PATTERN (F Nth+? L)
        DEFINE
            Nth AS 
                Nth.status >= F.status
                AND 
                Nth.ELEMENT_TIME - F.ELEMENT_TIME < 10000000000L,
            L AS 
                L.status >= F.status 
                AND 
                count(Nth.*) = 3
                AND L.ELEMENT_TIME - F.ELEMENT_TIME < 10000000000L 
...