5 式
Oracle Continuous Query Language (Oracle CQL)の式のリファレンスを提供します。式は、1つ以上の値と1つ以上の演算の組合せであり、確定値を持つ定数、値に評価される関数、または値を格納する属性を含みます。
式はそれぞれのデータ型に割り当てられます。この単純な式は4に評価され、データ型はNUMBER
(構成要素と同じデータ型)です。
2*2
次の式は、関数と演算子を使用するより複雑な式の例です。この式は現在の日付に7日を加算し、合計から時間の要素を削除し、結果をCHAR
データ型に変換します。
TO_CHAR(TRUNC(SYSDATE+7))
5.1 式の概要
GGSAでは、次の式がサポートされています:
-
集計(distinct)式: aggr_distinct_expr
-
集計式: aggr_expr
-
算術式: arith_expr
-
算術式リスト: arith_expr_list
-
Case式: case_expr
-
Decode式: decode。
-
関数式: func_expr
-
順序式: order_expr
次の場所で式を使用できます。
-
SELECT
文のselectリスト -
WHERE
句およびHAVING
句の条件
GGSAでは、Oracle CQL文の一部で式の形式の一部が使用できない場合があります。Oracle CQL文の式の制限の詳細は、「Oracle CQL文」で個々のOracle CQL文を参照してください。
このリファレンスの他の部分で説明している条件、Oracle CQL関数、Oracle CQL文でexpr
と示されている箇所では、適切な式表記を使用する必要があります。それに続く項では、様々な式の例をあげて説明しています。
ノート:
ストリーム入力の例で、h
で始まる行(h 3800
など)はハートビート入力タプルです。この情報により、GGSAには、タイムスタンプがハートビート値より小さい入力は行われないことが通知されます。
5.2 aggr_distinct_expr
distinct
を使用して集計の組込み関数を使用する場合は、aggr_distinct_expr
集計式を使用します。distinct
を使用しない集計の組込み関数を使用する場合は、「aggr_expr」を参照してください。
aggr_distinct_expr::=

arith_distinct_expr
は集計式の引数として指定できます。
aggr_distinct_expr
は次のOracle CQL文で使用できます。
詳細は、「組込みの集計関数」を参照してください。
5.3 aggr_expr
集計の組込み関数を使用する場合は、aggr_distinct_expr
集計式を使用します。distinct
を使用した集計の組込み関数を使用する場合は、「aggr_distinct_expr」を参照してください。
aggr_expr::=
表5-1 COUNT集計関数の戻り値
入力引数 | 戻り値 |
---|---|
|
|
|
パターンのすべての相関変数と一致する、重複とnullを含むタプルの数。 |
|
相関変数 |
|
|
first
およびlast
集計組込み関数は、次のピリオド区切りの値から成る単一の引数を使用します。
-
identifier1
:DEFINE
句で指定されたパターンの名前。 -
identifier2
:CREATE STREAM
文で指定されたストリーム要素の名前。
aggr_expr
は次のOracle CQL文で使用できます。
詳細については、以下を参照:
5.4 arith_expr
ストリーム要素の属性値、定数値、関数式の結果、集計組込み関数、case式またはdecodeの任意の組合せを使用して算術式を定義するには、arith_expr
算術式を使用します。すべての一般的な算術演算子(+
、-
、*
、/
)および連結演算子(||
)を使用できます。
arith_expr::=

(func_expr::=、aggr_expr::=、aggr_distinct_expr::=、case_expr::=、decode::=、arith_expr::=)
arith_expr
は次のOracle CQL文で使用できます。
詳細は、「算術演算子」を参照してください。
5.5 arith_expr_list
ストリーム要素の属性値、定数値、関数式の結果、集計組込み関数、case式またはdecodeの任意の組合せを使用して1つ以上の算術式を定義するには、arith_expr_list
算術式リストを使用します。すべての一般的な算術演算子(+
、-
、*
、/
)および連結演算子(||
)を使用できます。
arith_expr_list::=
5.6 case_expr
複数の条件でストリーム要素を評価するには、case式case_expr
を使用します。
case_expr::=
searched_case_list::=
searched_case::=
simple_case_list::=
simple_case::=

case_expr
は算術式のDECODE
句と同様です(「decode」を参照)。
searched_case
句では、non_mt_cond_list
がtrueに評価される場合、searched_case
句によって算術式またはnullのいずれかが返されます。
simple_case
句では、算術式がtrueである場合、simple_case
句によって別の算術式またはnullのいずれかが返されます。
case_expr
は次のOracle CQL文で使用できます。
5.6.1 例
この項では、case_expr
の次の例について説明します。
case_expr with SELECT *
問合せq97
とデータ・ストリームS0
があるとします。ストリームS1
のスキーマは(c1 integer, c2 float)
です。この問合せはリレーションを返します。
<query id="q97"><![CDATA[ select * from S0 where case when c2 < 25 then c2+5 when c2 > 25 then c2+10 end > 25 ]]></query>
Timestamp Tuple 1000 0.1,10 1002 0.14,15 200000 0.2,20 400000 0.3,30 500000 0.3,35 600000 ,35 h 800000 100000000 4.04,40 h 200000000
Timestamp Tuple Kind Tuple 400000:+ 0.3,30 500000:+ 0.3,35 600000:+ ,35 100000000:+ 4.04,40
case_expr with SELECT
問合せq96
とデータ・ストリームS0
およびS1
があるとします。ストリームS0
のスキーマは(c1 float, c2 integer)
であり、ストリームS1
のスキーマは(c1 float, c2 integer)
です。この問合せはリレーションを返します。
<query id="q96"><![CDATA[ select case to_float(S0.c2+10) when (S1.c2*100)+10 then S0.c1+0.5 when (S1.c2*100)+11 then S0.c1 else S0.c1+0.3 end from S0[rows 100], S1[rows 100] ]]></query>
Timestamp Tuple 1000 0.1,10 1002 0.14,15 200000 0.2,20 400000 0.3,30 500000 0.3,35 600000 ,35 h 800000 100000000 4.04,40 h 200000000
Timestamp Tuple 1000 10,0.1 1002 15,0.14 200000 20,0.2 300000 ,0.2 400000 30,0.3 100000000 40,4.04
Timestamp Tuple Kind Tuple 1000: + 0.6 1002: + 0.44 1002: + 0.4 1002: + 0.14 200000: + 0.5 200000: + 0.5 200000: + 0.4 200000: + 0.44 200000: + 0.7 300000: + 0.4 300000: + 0.44 300000: + 0.7 400000: + 0.6 400000: + 0.6 400000: + 0.6 400000: + 0.6 400000: + 0.4 400000: + 0.44 400000: + 0.5 400000: + 0.8 500000: + 0.6 500000: + 0.6 500000: + 0.6 500000: + 0.6 500000: + 0.6 600000: + 600000: + 600000: + 600000: + 600000: + 100000000: + 4.34 100000000: + 4.34 100000000: + 4.34 100000000: + 4.34 100000000: + 4.34 100000000: + 0.4 100000000: + 0.44 100000000: + 0.5 100000000: + 0.6 100000000: + 0.6 100000000: + 100000000: + 4.34
5.7 decode
複数の条件でストリーム要素を評価するには、decode
式を使用します。
decode::=

expr, search1, result1, search2, result2, ... , searchN, result N, default
DECODE
は、expr
を各search
値と1つずつ比較します。expr
がsearch
値と一致した場合、DECODE
式は対応するresult
値を返します。一致する値がない場合、DECODE
式はdefault
を返します。default
が省略されている場合、DECODE
式はnullを返します。
引数には任意の数値データ型(INTEGER
、BIGINT
、FLOAT
、DOUBLE
)または文字データ型(CHAR
)を使用できます。詳細は、「データ型」を参照してください。
search
、result
およびdefault
の各値は式から派生できます。GGSAでは短絡評価が使用されます。すべてのsearch
値を評価してからそれらをexpr
と比較するかわりに、各search
値はexpr
との比較が行われる前にのみ評価されます。このため、GGSAでは、前回の検索j (0 < j < i)
がexpr
と一致した場合に検索i
は評価されません。
expr
および各検索
値は、比較の前に最初の検索
値のデータ型に自動的に変換されます。GGSAは、戻り値を最初のresult
と同じデータ型に自動的に変換します。
DECODE
式の場合、GGSAでは、2つのnullが同等と見なされます。expr
がnullの場合、GGSAでは、最初のsearch
(NULL)に対してresult
が返されます。
expr
、searches
、results
およびdefault
を含むDECODE
式の要素の最大数は255です。
decode
式はcase_expr
と同様です(「case_expr::=」を参照)。
decode
式は次のOracle CQL文で使用できます。
5.7.1 例
問合せq
と入力リレーションR
があるとします。リレーションR
のスキーマは(c1 float, c2 integer)
です。この問合せはリレーションを返します。
<query id="q"><![CDATA[ ... SELECT DECODE (c2, 10, c1+0.5, 20, c1+0.1, 30, c1+0.2, c1+0.3) from R ]]></query>
Timestamp Tuple Kind Tuple 1000: + 0.1,10 1002: + 0.14,15 2000: - 0.1,10 2002: - 0.14,15 200000: + 0.2,20 201000: - 0.2,20 400000: + 0.3,30 401000: - 0.3,30 500000: + 0.3,35 501000: - 0.3,35 600000: + 0.3,35 601000: - 0.3,35 100000000: + 4.04,40 100001000: - 4.04,40
Timestamp Tuple Kind Tuple 1000: + 0.6 1002: + 0.44 2000: - 0.1,10 2002: - 0.14,15 200000: + 0.3 201000: - 0.2,20 400000: + 0.5 401000: - 0.3,30 500000: + 0.6 501000: - 0.3,35 100000000: + 4.34 100001000: - 4.34
5.8 func_expr
任意のOracle CQL組込み関数、ユーザー定義関数またはOracleデータ・カートリッジ関数を使用して関数呼出しを定義するには、func_expr
関数式を使用します。
func_expr::=
:=

func_name
次のように、関数の識別子を明示的に指定できます。
-
空の引数リストを使用して指定します。
-
1つ以上の引数の引数リストを使用して指定します。
-
個別の算術式を使用して指定します。
詳細は、aggr_distinct_exprを参照してください。
PREV
PREV
関数は、次のピリオド区切りのidentifier引数から成る単一の引数を使用します。
-
identifier1
:DEFINE
句で指定されたパターンの名前。 -
identifier2
:CREATE STREAM
文で指定されたストリーム要素の名前。
また、PREV
関数は次のconst_int引数を使用します。
-
const_int
: 現在のストリーム要素の前にある比較対象のストリーム要素の索引。デフォルト: 1。 -
const_bigint
: 現在のストリーム要素の前にある比較対象のストリーム要素のタイムスタンプ。ストリーム要素のタイムスタンプを取得するには、ELEMENT_TIME
疑似列を使用できます(「ELEMENT_TIME疑似列」を参照)。
詳細は、「prev」を参照してください。例については、「func_expr PREV関数の例」を参照してください。
FIRSTとLAST
FIRST
関数とLAST
関数は、次のピリオド区切りの個別の値から成る単一の引数をそれぞれ使用します。
-
identifier1
:DEFINE
句で指定されたパターンの名前。 -
identifier2
:CREATE STREAM
文で指定されたストリーム要素の名前。
詳細については、以下を参照:
関数の識別子は、non_mt_arg_list
(呼び出される組込み関数またはユーザー定義関数に対して有効な引数のリスト)を明示的に使用するかどうかにかかわらず指定できます。リストには、1つまたは複数の引数を含めることができます。
func_expr
は次のOracle CQL文で使用できます。
詳細は、「関数」を参照してください。
5.8.1 例
この項では、func_expr
の次の例について説明します。
func_expr PREV関数の例
次の例に、PREV
関数を呼び出すfunc_exprの作成方法を示します。
<query id="q36"><![CDATA[ select T.Ac1 from S15 MATCH_RECOGNIZE ( PARTITION BY c2 MEASURES A.c1 as Ac1 PATTERN(A) DEFINE A as (A.c1 = PREV(A.c1,3,5000) ) ) as T ]]></query>
次の例に、SUM
関数を呼び出すfunc_exprの作成方法を示します。
<query id="q3"><![CDATA[ select sum(c2) from S1[range 5] ]]></query>
5.9 order_expr
GGSAが問合せで選択されたタプルを返すソート順を指定するには、order_expr
式を使用します。
order_expr::=

ストリーム要素はattr
名で指定できます。
または、const_int
索引でもストリーム要素を指定できます。索引はストリームの登録または作成時に指定したストリーム要素の位置に対応します。
5.9.1 例
ストリームS3
のスキーマは(c1 bigint, c2 interval, c3 byte(10), c4 float)
です。この例は、問合せq210
の結果をc1
、c2
の順でソートする方法と、問合せq211
の結果をc2
、索引3のストリーム要素(c3)
、索引4のストリーム要素(c4)
の順でソートする方法を示します。
<query id="q210"><![CDATA[ select * from S3 order by c1 desc nulls first, c2 desc nulls last ]]></query> <query id="q211"><![CDATA[ select * from S3 order by c2 desc nulls first, 3 desc nulls last, 4 desc ]]></query>