5

Oracle Continuous Query Language (Oracle CQL)の式のリファレンスを提供します。式は、1つ以上の値と1つ以上の演算の組合せであり、確定値を持つ定数、値に評価される関数、または値を格納する属性を含みます。

式はそれぞれのデータ型に割り当てられます。この単純な式は4に評価され、データ型はNUMBER (構成要素と同じデータ型)です。

2*2 

次の式は、関数と演算子を使用するより複雑な式の例です。この式は現在の日付に7日を加算し、合計から時間の要素を削除し、結果をCHARデータ型に変換します。

TO_CHAR(TRUNC(SYSDATE+7))

5.1 式の概要

GGSAでは、次の式がサポートされています:

次の場所で式を使用できます。

  • 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::=

aggr distinct expr

(arith_expr::=)

arith_distinct_exprは集計式の引数として指定できます。

aggr_distinct_exprは次のOracle CQL文で使用できます。

詳細は、「組込みの集計関数」を参照してください。

5.3 aggr_expr

集計の組込み関数を使用する場合は、aggr_distinct_expr集計式を使用します。distinctを使用した集計の組込み関数を使用する場合は、「aggr_distinct_expr」を参照してください。

aggr_expr::=

aggr expr

(arith_expr::= )

arith_exprは集計式の引数として指定できます。

count組込み集計関数は、表5-1でリストされているいずれかの値で構成される単一の引数を使用し、示されたintを返します。

表5-1 COUNT集計関数の戻り値

入力引数 戻り値

arith_expr

arith_exprがnullでない場合のタプルの数。

*

パターンのすべての相関変数と一致する、重複とnullを含むタプルの数。

identifier.*

相関変数identifierと一致する、重複とnullを含む、すべてのタプルの数。

identifier.attr

attrがnullでない場合に、相関変数identifierと一致するタプルの数。

firstおよびlast集計組込み関数は、次のピリオド区切りの値から成る単一の引数を使用します。

  • identifier1: DEFINE句で指定されたパターンの名前。

  • identifier2: CREATE STREAM文で指定されたストリーム要素の名前。

aggr_exprは次のOracle CQL文で使用できます。

詳細については、以下を参照:

5.4 arith_expr

ストリーム要素の属性値、定数値、関数式の結果、集計組込み関数、case式またはdecodeの任意の組合せを使用して算術式を定義するには、arith_expr算術式を使用します。すべての一般的な算術演算子(+-*/)および連結演算子(||)を使用できます。

arith_expr::=

5.5 arith_expr_list

ストリーム要素の属性値、定数値、関数式の結果、集計組込み関数、case式またはdecodeの任意の組合せを使用して1つ以上の算術式を定義するには、arith_expr_list算術式リストを使用します。すべての一般的な算術演算子(+-*/)および連結演算子(||)を使用できます。

arith_expr_list::=

arith expr list

(arith_expr::=)

詳細は、「算術演算子」を参照してください。

5.5.1

次の例にarith_expr_list式の使用方法を示します。

<query id="q1"><![CDATA[ 
    select
        XMLELEMENT("Emp", XMLELEMENT("Name", e.job_id||' '||e.last_name),XMLELEMENT("Hiredate", e.hire_date)
        )
    from 
        tkdata51_S0 [range 1] as e
]]></query>

5.6 case_expr

複数の条件でストリーム要素を評価するには、case式case_exprを使用します。

case_expr::=

searched_case_list::=

searched_case::=

simple_case_list::=

simple_case::=

simple case

(arith_expr::=)

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::=

decode
expr, search1, result1, search2, result2, ... , searchN, result N, default

DECODEは、exprを各search値と1つずつ比較します。exprsearch値と一致した場合、DECODE式は対応するresult値を返します。一致する値がない場合、DECODE式はdefaultを返します。defaultが省略されている場合、DECODE式はnullを返します。

引数には任意の数値データ型(INTEGERBIGINTFLOATDOUBLE)または文字データ型(CHAR)を使用できます。詳細は、「データ型」を参照してください。

searchresultおよび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が返されます。

exprsearchesresultsおよび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::=

:=

identifier

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::=

order expr

ストリーム要素はattr名で指定できます。

または、const_int索引でもストリーム要素を指定できます。索引はストリームの登録または作成時に指定したストリーム要素の位置に対応します。

5.9.1

ストリームS3のスキーマは(c1 bigint, c2 interval, c3 byte(10), c4 float)です。この例は、問合せq210の結果をc1c2の順でソートする方法と、問合せ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>