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

戻る
戻る
 
次へ
次へ
 

16 Oracle CQL 文

この章では、Oracle CEP でサポートされるさまざまな Oracle CQL データ定義言語 (DDL) とデータ操作言語 (DML) の文について説明します。

16.1 Oracle CQL 文の概要

Oracle CQL では以下の DDL 文をサポートしています。


注意 :

ストリーム入力の例で、h で始まる行 (h 3800 など) はハートビート入力タプルです。これは、ハートビート値よりも小さいタイムスタンプを持つこれ以上の入力がないことを Oracle CEP に通知します。

詳細については、以下を参照してください。


Query

目的

後続の Oracle CQL 文の identifier で参照される Oracle CQL クエリを定義するには、query 文を使用します。

要件

クエリがストリームまたはビューを参照する場合は、ストリームまたはビューが存在している必要があります。

クエリがすでに存在している場合は、Oracle CEP サーバで例外が送出されます。

詳細については、以下を参照してください。

構文

例 16-1 に示すように、<query></query> 要素でクエリを表します。query 要素の id 属性として identifier を指定します。

例 16-1 <query></query> 要素のクエリ

<query id="q0"><![CDATA[ 
    select * from OrderStream where orderAmount > 10000.0 
]]></query>

query::=

query.gif を説明する関連テキスト

(sfw_block::=xstream_clause::=binary::=)

sfw_block::=

sfw_block.gif を説明する関連テキスト

(select_clause::=from_clause::=opt_where_clause::=opt_group_by_clause::=order_by_clause::=order_by_top_clause::=opt_having_clause::=)

select_clause::=

select_clause.gif を説明する関連テキスト

(non_mt_projterm_list::=)

non_mt_projterm_list::=

non_mt_projterm_list.gif を説明する関連テキスト

(projterm::=)

projterm::=

projterm.gif を説明する関連テキスト

(identifier::=)

from_clause::=

from_clause.gif を説明する関連テキスト

(non_mt_relation_list::=)

non_mt_relation_list::=

non_mt_relation_list.gif を説明する関連テキスト

(relation_variable::=)

relation_variable::=

relation_variable.gif を説明する関連テキスト

(identifier::=window_type::=pattern_recognition_clause::=xmltable_clause::=)

window_type::=

window_type.gif を説明する関連テキスト

(identifier::=non_mt_attr_list::=)

opt_where_clause::=

opt_where_clause.gif を説明する関連テキスト

(non_mt_cond_list::=)

opt_group_by_clause::=

opt_group_by_clause.gif を説明する関連テキスト

(non_mt_attr_list::=)

order_by_clause::=

order_by_clause.gif を説明する関連テキスト

(order_by_list::=)

order_by_top_clause::=

order_by_top_clause.gif を説明する関連テキスト

(pattern_partition_clause::=order_by_list::=)

order_by_list::=

order_by_list.gif を説明する関連テキスト

(orderterm::=)

orderterm::=

orderterm.gif を説明する関連テキスト

(order_expr::=null_spec::=asc_desc::=)

null_spec::=

null_spec.gif を説明する関連テキスト

asc_desc::=

asc_desc.gif を説明する関連テキスト

opt_having_clause::=

opt_having_clause.gif を説明する関連テキスト

(non_mt_cond_list::=)

binary::=

binary.gif を説明する関連テキスト

xstream_clause::=

xstream_clause.gif を説明する関連テキスト

xmltable_clause::=

xmltable_clause.gif を説明する関連テキスト

(const_string::=xqryargs_list::=xtbl_cols_list::=)

xtbl_cols_list::=

xtbl_cols_list.gif を説明する関連テキスト

(xtbl_col::=)

xtbl_col::=

xtbl_col.gif を説明する関連テキスト

セマンティクス

named_query

Oracle CQL クエリ文自体を指定します (queryを参照)。

USE UPDATE SEMANTICS を使用してクエリをコンフィグレーションすることを検討している場合は、1 つ以上のストリーム要素をプライマリ キーとして宣言する必要があります (out_of_line_constraint::=)。

構文については、「Query」を参照してください。

query

Oracle CQL クエリは、以下の任意の句から作成できます。

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

sfw_block

Oracle CQL クエリの select、from、およびその他の省略可能な句を指定します。以下の任意の句を指定できます。

構文については、sfw_block::= (親 : query::=) を参照してください。

select_clause

Oracle CQL クエリ文の select 句を指定します。

アスタリスク (*) を指定した場合、この句では重複と null を含むすべてのタプルが返されます。

それ以外の場合は、必要なストリーム要素を個別に指定します (non_mt_projterm_listを参照)。

選択した重複タプルの各セットで 1 つのコピーのみが返されるようにするには、オプションで distinct を指定します。重複タプルとは select リスト内の各式と一致する値を持つタプルです。例については、「Select と Distinct の例」を参照してください。

構文については、select_clause::= (親 : sfw_block::=) を参照してください。

non_mt_projterm_list

Oracle CQL クエリ文の select 句で射影条件 (projterm) または射影条件のカンマ区切りのリストを指定します。

構文については、non_mt_projterm_list::= (親 : select_clause::=) を参照してください。

projterm

Oracle CQL クエリ文の select 句で射影条件を指定します。from_clause (from_clauseを参照) の任意のストリームまたはビューから、要素の identifier を使用して任意の要素を選択できます。

オプションで、射影条件に算術式を指定できます。

オプションで、ストリーム要素の名前をそのまま使用する代わりに AS キーワードを使用して射影条件のエリアスを指定できます。

構文については、projterm::= (親 : non_mt_projterm_list::=) を参照してください。

from_clause

クエリで選択される個別のストリームまたはビューを指定して、Oracle CQL 文の from 句を指定します (non_mt_relation_listを参照)。

構文については、from_clause::= (親 : sfw_block::=) を参照してください。

non_mt_relation_list

Oracle CQL 文の from 句で、ストリームまたはビュー (relation_variable)、または、ストリームまたはビューのカンマ区切りのリストを指定します。

構文については、non_mt_relation_list::= (親 : from_clause::=) を参照してください。

relation_variable

Oracle CQL クエリ文で選択されるストリームまたはビューを指定するには、relation_variable 文を使用します。

ストリームまたはビューの登録または作成時に使用した identifier によって、以前に登録または作成したストリームまたはビューを直接指定できます。オプションで、名前をそのまま使用する代わりに AS キーワードを使用してストリームまたはビューのエリアスを指定します。

組み込みのストリームからリレーションへの演算子を指定するには、window_type 句を使用します (window_typeを参照)。オプションで、名前をそのまま使用する代わりに AS キーワードを使用してストリームまたはビューのエリアスを指定します。

データ ストリーム用に最適化された高度な比較をストリームまたはビューに適用するには、pattern_recognition_clause を使用します (pattern_recognition_clauseを参照)。オプションで、名前をそのまま使用する代わりに AS キーワードを使用してストリームまたはビューのエリアスを指定します。

XPath および XQuery を使用して xmltype ストリーム要素を処理するには、xmltable_clause を使用します (「xmltable_clause」を参照)。オプションで、名前をそのまま使用する代わりに AS キーワードを使用してストリームまたはビューのエリアスを指定します。

詳細については、以下を参照してください。

構文については、relation_variable::= (親 : non_mt_relation_list::=) を参照してください。

window_type

組み込みのストリームからリレーションへの演算子を指定します。

詳細については、節 1.1.3「ストリームからリレーションへの演算子 (枠)」を参照してください。

構文については、window_type::= (親 : relation_variable::=) を参照してください。

time_spec

範囲または分割された範囲のスライド枠がスライドする時間を指定します。

デフォルト : 単位を指定しない場合、Oracle CEP では [second|seconds] が想定されます。

詳細については、「範囲ベースのストリームからリレーションへの枠演算子」および「分割されたストリームからリレーションへの枠演算子」を参照してください。

構文については、time_spec::= (親 : window_type::=) を参照してください。

opt_where_clause

Oracle CQL クエリ文の (省略可能な) where 句を指定します。

構文については、opt_where_clause::= (親 : sfw_block::=) を参照してください。

opt_group_by_clause

Oracle CQL クエリ文の (省略可能な) GROUP BY 句を指定します。選択されたストリーム要素を expr の値に基づいてグループ化し、各グループごとに単一の (集約) サマリ結果を返す場合は、GROUP BY 句を使用します。

GROUP BY 句の式には、ストリーム要素が select リストにあるかどうかにかかわらず、FROM 句の任意のストリーム要素またはビューを含めることができます。

GROUP BY 句ではストリーム要素がグループ化されますが、結果セットの順序は保証されません。グループの並べ替えを行うには、ORDER BY 句を使用します。

構文については、opt_group_by_clause::= (親 : sfw_block::=) を参照してください。

order_by_clause

1 つ以上の並べ替え条件 (ordertermを参照) のカンマ区切りのリスト (order_by_list) として、Oracle CQL クエリ文の ORDER BY 句を指定します。ORDER BY 句を使用して、ルールの左側のストリーム要素が評価される順序を指定します。expr はディメンションまたはメジャー列に解決される必要があります。

詳細については、節 14.2.6「クエリ結果のソート」を参照してください。

構文については、order_by_clause::= (親 : sfw_block::=) を参照してください。

order_by_top_clause

1 つ以上の並べ替え条件 (ordertermを参照) のカンマ区切りのリスト (order_by_list) として、Oracle CQL クエリ文の ORDER BY 句を指定し、その後に ROWS キーワードと要素数の整数 (n) を指定します。この形式の ORDER BY 句を使用して、ストリームまたはリレーションの上位 n 個の要素を選択します。この句では常にリレーションが返されます。

以下のクエリの例を考えます。

詳細については、以下を参照してください。

構文については、order_by_top_clause::= (親 : sfw_block::=) を参照してください。

order_by_list

(省略可能な) ORDER BY 句で、1 つ以上の並べ替え条件 (ordertermを参照) のカンマ区切りのリストを指定します。

構文については、order_by_list::= (親 : order_by_clause::=) を参照してください。

orderterm

ストリーム要素 (attr::=) またはストリーム要素の位置インデックス (定数 int)。オプションで、NULLS キーワードを使用して、null を順序の最初または最後のどちらにするかをコンフィグレーションできます (null_specを参照)。

order_expr (order_expr::=) には attr または constant_int を指定できます。attr (attr::=) には任意のストリーム要素または擬似列を指定できます。

構文については、orderterm::= (親 : order_by_list::=) を参照してください。

null_spec

指定の並べ替え条件 (ordertermを参照) で null を順序の最初にするか (NULLS FIRST)、または最後にするか (NULLS LAST) を指定します。

構文については、null_spec::= (親 : orderterm::=) を参照してください。

asc_desc

並べ替え条件が昇順 (ASC) または降順 (DESC) のどちらであるかを指定します。

構文については、asc_desc::= (親 : orderterm::=) を参照してください。

opt_having_clause

HAVING 句を使用して、返されたストリーム要素のグループを指定された conditionTRUE のグループに制限します。この句を省略すると、Oracle CEP ではすべてのグループのサマリ結果が返されます。

GROUP BYHAVINGopt_where_clause の後に指定します。GROUP BYHAVING の両方を指定する場合は、どちらの順序でも指定できます。

例については、「HAVING の例」を参照してください。

構文については、opt_having_clause::= (親 : sfw_block::=) を参照してください。

binary

2 つのストリームまたはビューで返されるタプルの集合演算を実行するには、binary 句を使用します。

例については、以下を参照してください。

構文については、binary::= (親 : query::=) を参照してください。

xstream_clause

クエリに適用されるリレーションからストリームへの演算子を指定するには、xstream_clause を使用します。

詳細については、節 1.1.4「リレーションからストリームへの演算子」を参照してください。

構文については、xstream_clause::= (親 : query::=) を参照してください。

xmltable_clause

XPath および XQuery を使用して xmltype ストリーム要素を処理するには、xmltable_clause を使用します。1 つ以上の XML テーブル列 (xtbl_col::= を参照) のカンマ区切りのリスト (xtbl_cols_list::= を参照) を指定できます。

例については、「XMLTABLE のクエリの例」を参照してください。

構文については、xmltable_clause::= (親 : relation_variable::=) を参照してください。

pattern_recognition_clause

データ ストリーム用に最適化された高度な比較を実行するには、pattern_recognition_clause を使用します。

詳細および例については、第 15 章「MATCH_RECOGNIZE を使用したパターン認識」を参照してください。

構文については、pattern_recognition_clause::= (親 : relation_variable::=) を参照してください。

以下の例では、この文でサポートされるさまざまなセマンティクスを示します。

その他の例については、第 14 章「Oracle CQL のクエリ、ビュー、および結合」を参照してください。

単純なクエリの例

例 16-2 は、ストリーム要素 orderAmount が 10000 を超える場合のすべての (*) タプルをストリーム OrderStream から選択する単純なクエリ q0 を登録する方法を示します。

例 16-2 クエリの登録

<query id="q0"><![CDATA[ 
    select * from OrderStream where orderAmount > 10000.0 
]]></query>

HAVING の例

例 16-3 のクエリ q4例 16-4 のデータ ストリーム S2 があるとします。ストリーム S2 のスキーマは (c1 integer, c2 integer) です。例 16-5 はクエリで返されるリレーションを示します。

例 16-3 HAVING のクエリ

<query id="q4"><![CDATA[ 
    select 
        c1,
        sum(c1) 
    from 
        S2[range 10] 
    group by 
        c1 
    having 
        c1 > 0 and sum(c1) > 1
]]></query>

例 16-4 HAVING のストリーム入力

Timestamp   Tuple
1000        ,2
2000        ,4
3000        1,4
5000        1,
6000        1,6
7000        ,9
8000        ,

例 16-5 HAVING のリレーション出力

Timestamp   Tuple Kind  Tuple
5000:       +           1,2
6000:       -           1,2
6000:       +           1,3

BINARY の例 : UNION と UNION ALL

例 16-7例 16-8 のリレーション R1R2 がそれぞれある場合、例 16-6UNION クエリ q1 では例 16-9 のリレーションが返されます。例 16-6UNION ALL クエリ q2 では例 16-10 のリレーションが返されます。

例 16-6 集合演算子 : UNION のクエリ

<query id="q1"><![CDATA[ 
    R1 UNION R2 
]]></query>
<query id="q2"><![CDATA[ 
    R1 UNION ALL R2 
]]></query>

例 16-7 集合演算子 : UNION のリレーション入力 R1

Timestamp   Tuple Kind  Tuple
   200000:  +           20,0.2
   201000:  -           20,0.2
   400000:  +           30,0.3
   401000:  -           30,0.3
100000000:  +           40,4.04
100001000:  -           40,4.04

例 16-8 集合演算子 : UNION のリレーション入力 R2

Timestamp   Tuple Kind  Tuple
     1002:  +           15,0.14
     2002:  -           15,0.14
   200000:  +           20,0.2
   201000:  -           20,0.2
   400000:  +           30,0.3
   401000:  -           30,0.3
100000000:  +           40,4.04
100001000:  -           40,4.04

例 16-9 集合演算子 : UNION のリレーション出力

Timestamp   Tuple Kind  Tuple
     1002:  +           15,0.14
     2002:  -           15,0.14
   200000:  +           20,0.2
   201000:  -           20,0.2
   400000:  +           30,0.3
   401000:  -           30,0.3
100000000:  +           40,4.04
100001000:  -           40,4.04

例 16-10 集合演算子 : UNION ALL のリレーション出力

Timestamp   Tuple Kind  Tuple
     1002:  +           15,0.14
     2002:  -           15,0.14
   200000:  +           20,0.2
   200000:  +           20,0.2
    20100:  -           20,0.2
   201000:  -           20,0.2
   400000:  +           30,0.3
   400000:  +           30,0.3
   401000:  -           30,0.3
   401000:  -           30,0.3
100000000:  +           40,4.04
100000000:  +           40,4.04
 10001000:  -           40,4.04
100001000:  -           40,4.04

BINARY の例 : INTERSECT

例 16-12例 16-13 のリレーション R1R2 がそれぞれある場合、例 16-11INTERSECT クエリ q1 では例 16-14 のリレーションが返されます。

例 16-11 集合演算子 : INTERSECT のクエリ

<query id="q1"><![CDATA[ 
    R1 INTERSECT R2 
]]></query>

例 16-12 集合演算子 : INTERSECT のリレーション入力 R1

Timestamp   Tuple Kind  Tuple
1000:        +          10,30
1000:        +          10,40
2000:        +          11,20
3000:        -          10,30
3000:        -          10,40

例 16-13 集合演算子 : INTERSECT のリレーション入力 R2

Timestamp   Tuple Kind  Tuple
1000:       +           10,40
2000:       +           10,30
2000:       -           10,40
3000:       -           10,30

例 16-14 集合演算子 : INTERSECT のリレーション出力

Timestamp   Tuple Kind  Tuple
1000:       +           10,30
1000:       +           10,40
1000:       -           10,30
1000:       -           10,40
1000:       +           10,40
2000:       +           11,20
2000:       -           11,20
2000:       +           10,30
2000:       -           10,40
3000:       -           10,30

BINARY の例 : MINUS

例 16-16例 16-17 のリレーション R1R2 がそれぞれある場合、例 16-15MINUS クエリ q1 では例 16-18 のリレーションが返されます。

例 16-15 集合演算子 : MINUS のクエリ

<query id="q1BBAQuery"><![CDATA[ 
    R1 MINUS R2 
]]></query>

例 16-16 集合演算子 : MINUS のリレーション入力 R1

Timestamp   Tuple Kind  Tuple
1500:       +           10,40
2000:       +           10,30
2000:       -           10,40
3000:       -           10,30

例 16-17 集合演算子 : MINUS のリレーション入力 R2

Timestamp   Tuple Kind  Tuple
1000:       +           11,20
2000:       +           10,40
3000:       -           10,30

例 16-18 集合演算子 : MINUS のリレーション出力

Timestamp   Tuple Kind  Tuple
1000:       +           10,40.0
2000:       -           10,40.0

Select と Distinct の例

例 16-19 のクエリ q1 があるとします。例 16-20 のデータ ストリーム S がある場合、クエリでは例 16-21 のリレーションが返されます。

例 16-19 Select DISTINCT のクエリ

<query id="q1"><![CDATA[ 
    SELECT DISTINCT FROM S WHERE c1 > 10 
]]></query>

例 16-20 Select DISTINCT のストリーム入力

Timestamp   Tuple
 1000       23
 2000       14
 3000       13
 5000       22
 6000       11
 7000       10
 8000        9
10000        8
11000        7
12000       13
13000       14

例 16-21 Select DISTINCT のストリーム出力

Timestamp   Tuple
1000        23
2000        14
3000        13
5000        22
6000        11

XMLTABLE のクエリの例

例 16-22 のクエリ q1例 16-23 のデータ ストリーム S があるとします。ストリーム S のスキーマは (c1 xmltype) です。例 16-24 はクエリで返されるリレーションを示します。詳細については、節 14.2.5「XMLTable のクエリ」を参照してください。

例 16-22 XMLTABLE のクエリ

<query id="q1"><![CDATA[ 
    SELECT
        X.Name, 
        X.Quantity 
    from 
        S1 
    XMLTable (
        "//item" PASSING BY VALUE S1.c2 as "." 
        COLUMNS 
            Name CHAR(16) PATH "/item/productName", 
            Quantity INTEGER PATH "/item/quantity"
    ) AS X
]]></query>

例 16-23 XMLTABLE のストリーム入力

Timestamp   Tuple
3000        "<purchaseOrder><shipTo><name>Alice Smith</name><street>123 Maple Street</street><city>Mill Valley</city><state>CA</state><zip>90952</zip> </shipTo><billTo><name>Robert Smith</name><street>8 Oak Avenue</street><city>Old Town</city><state>PA</state> <zip>95819</zip> </billTo><comment>Hurry, my lawn is going wild!</comment><items> <item><productName>Lawnmower </productName><quantity>1</quantity><USPrice>148.95</USPrice><comment>Confirm this is electric</comment></item><item> <productName>Baby Monitor</productName><quantity>1</quantity> <USPrice>39.98</USPrice> <shipDate>1999-05-21</shipDate></item></items> </purchaseOrder>"
4000        "<a>hello</a>"

例 16-24 XMLTABLE のリレーション出力

Timestamp   Tuple Kind  Tuple
3000:       +           <productName>Lawnmower</productName>,<quantity>1</quantity>
3000:       +           <productName>Baby Monitor</productName>,<quantity>1</quantity>

ORDER BY ROWS のクエリの例

例 16-25 のクエリ q1 があるとします。例 16-26 のデータ ストリーム S0 がある場合、クエリでは例 16-27 のリレーションが返されます。

例 16-25 ORDER BY ROWS のクエリ

<query id="q1"><![CDATA[ 
    create query q1 as select c1 ,c2 from S0 order by c1,c2 rows 5
]]></query>

例 16-26 ORDER BY ROWS のストリーム入力

Timestamp   Tuple
1000        7, 15
2000        7, 14
2000        5, 23
2000        5, 15
2000        5, 15
2000        5, 25
3000        2, 13
3000        3, 19
4000        4, 17
5000        1, 9
h 1000000000

例 16-27 ORDER BY ROWS の出力

Timestamp   Tuple Kind  Tuple
1000:       +           7,15
2000:       +           7,14
2000:       +           5,23
2000:       +           5,15
2000:       +           5,15
2000:       -           7,15
2000:       +           5,25
3000:       -           7,14
3000:       +           2,13
3000:       -           5,25
3000:       +           3,19
4000:       -           5,23
4000:       +           4,17
5000:       -           5,15
5000:       +           1,9

View

目的

後続の Oracle CQL 文の identifier で参照される、基本のストリームまたはリレーションに対するビューを作成するには、view 文を使用します。

要件

詳細については、以下を参照してください。

構文

例 16-28 に示すように、<view></view> 要素でビューを表します。view 要素の id 属性として identifier を指定します。オプションで、view 要素の schema 属性としてスキーマを指定します。

例 16-28 <view></view> 要素のビュー

<view id="v2" schema="cusip bid ask"><![CDATA[ 
    IStream(select * from S1[range 10 slide 10]) 
]]></view>

ビュー本体の構文はクエリと同じです。詳細については、「Query」を参照してください。

以下の例では、この文でサポートされるさまざまなセマンティクスを示します。その他の例については、第 14 章「Oracle CQL のクエリ、ビュー、および結合」を参照してください。

ビュー登録の例

例 16-29 はビュー v2 を登録する方法を示します。

例 16-29 ビューの登録

<view id="v2" schema="cusip bid ask"><![CDATA[ 
    IStream(select * from S1[range 10 slide 10]) 
]]></view>