ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Complex Event Processing CQL言語リファレンス
11gリリース1 (11.1.1.6.2)
B61613-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

20 Oracle CQL文

この章では、Oracle Continuous Query Language (Oracle CQL)のデータ定義言語(DDL)文について説明します。

20.1 Oracle CQL文の概要

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


注意:

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


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


Query

目的

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

要件

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

問合せがすでに存在する場合は、Oracle CEPサーバーで例外がスローされます。

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

構文

例20-1に示すように、<query></query>要素で問合せを表します。

query要素は1つの属性を持ちます。

例20-1 <query></query>要素の問合せ

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

query::=

query.pngについては周囲のテキストで説明しています。

(sfw_block::=idstream_clause::=binary::=using_clause::=)

sfw_block::=

sfw_block.pngについては周囲のテキストで説明しています。

(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.pngについては周囲のテキストで説明しています。

(non_mt_projterm_list::=)

non_mt_projterm_list::=

non_mt_projterm_list.pngについては周囲のテキストで説明しています。

(projterm::=)

projterm::=

projterm.pngについては周囲のテキストで説明しています。

(arith_expridentifier::=)

from_clause::=

from_clause.pngについては周囲のテキストで説明しています。

(non_mt_relation_list::=relation_variable::=non_mt_cond_list::=)

non_mt_relation_list::=

non_mt_relation_list.pngについては周囲のテキストで説明しています。

(relation_variable::=)

relation_variable::=

relation_variable.pngについては周囲のテキストで説明しています。

(identifier::=window_type::=pattern_recognition_clause::=xmltable_clause::=object_expr::=datatype::=table_clause::=)

window_type::=

window_type.pngについては周囲のテキストで説明しています。

(identifier::=non_mt_attr_list::=time_spec::=)

table_clause::=

table_clause.pngについては周囲のテキストで説明しています。

(object_expr::=identifier::=datatype::=)

opt_where_clause::=

opt_where_clause.pngについては周囲のテキストで説明しています。

(non_mt_cond_list::=)

opt_group_by_clause::=

opt_group_by_clause.pngについては周囲のテキストで説明しています。

(non_mt_attr_list::=)

order_by_clause::=

order_by_clause.pngについては周囲のテキストで説明しています。

(order_by_list::=)

order_by_top_clause::=

order_by_top_clause.pngについては周囲のテキストで説明しています。

(pattern_partition_clause::=order_by_list::=)

order_by_list::=

order_by_list.pngについては周囲のテキストで説明しています。

(orderterm::=)

orderterm::=

orderterm.pngについては周囲のテキストで説明しています。

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

null_spec::=

null_spec.pngについては周囲のテキストで説明しています。

asc_desc::=

asc_desc.pngについては周囲のテキストで説明しています。

opt_having_clause::=

opt_having_clause.pngについては周囲のテキストで説明しています。

(non_mt_cond_list::=)

binary::=

binary.pngについては周囲のテキストで説明しています。

idstream_clause::=

idstream_clause.pngについては周囲のテキストで説明しています。

using_clause::=

using_clause.pngについては周囲のテキストで説明しています。

(usinglist::=)

usinglist::=

usinglist.pngについては周囲のテキストで説明しています。

(usingterm::=)

usingterm::=

usingterm.pngについては周囲のテキストで説明しています。

(usingexpr::=)

usingexpr::=

usingexpr.pngについては周囲のテキストで説明しています。

(attr::=const_int::=)

xmltable_clause::=

xmltable_clause.pngについては周囲のテキストで説明しています。

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

xmlnamespace_clause::=

xmlnamespace_clause.pngについては周囲のテキストで説明しています。

(xmlnamespaces_list::=)

xmlnamespaces_list::=

xmlnamespaces_list.pngについては周囲のテキストで説明しています。

(xml_namespace::=)

xml_namespace::=

xml_namespace.pngについては周囲のテキストで説明しています。

(const_string::=)

xtbl_cols_list::=

xtbl_cols_list.pngについては周囲のテキストで説明しています。

(xtbl_col::=)

xtbl_col::=

describes xtbl_col.pngについては周囲のテキストで説明しています。

セマンティクス

named_query

Oracle CQL問合せ文自体を指定します(queryを参照)。

構文については、「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を参照)。

外部結合を実行するには、LEFTまたはRIGHT OUTER JOIN ... ON構文を使用します。内部結合を実行するには、WHERE句を使用します。

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

構文については、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キーワードを使用してストリームまたはビューの別名を指定します。

リレーションとして、Oracle CQL問合せのFROM句内のデータ・カートリッジ関数から返された複数の行にアクセスするには、table_clauseを使用します(table_clauseを参照)。

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

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

window_type

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

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

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

table_clause

データ・カートリッジのTABLE句を使用して、Oracle CQL問合せのFROM句内のデータ・カートリッジ関数から返された複数の行にアクセスします。

TABLE句は返された複数の行をOracle CQLリレーションに変換します。これは外部リレーションであるため、TABLE関数句とストリームを結合する必要があります。Oracle CEPでは、結合ストリームに要素が到着したときにのみデータ・カートリッジ・メソッドを呼び出します。

オプションのOFキーワードを使用して、返された配列型またはCollection型に含められる型を指定します。

ASキーワードを使用して、object_exprと返されたリレーションの別名を指定します。

次の点に注意してください。

例については、次の項を参照してください。

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

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

time_spec

範囲または分割された範囲のスライディング・ウィンドウがスライドする時間を指定します。

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

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

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

opt_where_clause

Oracle CQL問合せ文の(オプションの)where句を指定します。

Oracle CQLではWHERE句はGROUP BYまたはHAVINGの前に適用されるため、SELECT句で集計関数を指定する場合、WHERE句ではなくHAVING句で集計関数の結果をテストする必要があります。

Oracle CQLでは(SQLと同様)、FROM句は、WHERE句の前に評価されます。次のOracle CQL問合せがあるとします。

SELECT ... FROM S MATCH_RECOGNIZE ( .... ) as T WHERE ...

この問合せでは、S MATCH_RECOGNIZE ( .... ) as Tは、FROM句内の副問合せと同様、最初でWHERE句の前に評価されます。このため、MATCH_RECOGNIZE句とWHERE句の両方が同じOracle CQL問合せ内で使用されることはほとんどありません。かわりに、通常、ビューを使用して必要なWHERE句をストリームに適用し、MATCH_RECOGNIZE句を適用する問合せ内のビューから選択します。

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

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

opt_group_by_clause

Oracle CQL問合せ文の(オプションの)GROUP BY句を指定します。選択されたストリーム要素をexprの値に基づいてグループ化し、各グループごとに単一の(集計)サマリー結果を返す場合は、GROUP BY句を使用します。

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

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

Oracle CQLではWHERE句はGROUP BYまたはHAVINGの前に適用されるため、SELECT句で集計関数を指定する場合、WHERE句ではなくHAVING句で集計関数の結果をテストする必要があります。

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

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

order_by_clause

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

詳細は、18.2.9項「問合せ結果のソート」を参照してください。

構文については、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の両方を指定する場合は、どちらの順序でも指定できます。

Oracle CQLではWHERE句はGROUP BYまたはHAVINGの前に適用されるため、SELECT句で集計関数を指定する場合、WHERE句ではなくHAVING句で集計関数の結果をテストする必要があります。

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

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

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

binary

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

例については、次の項を参照してください。

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

idstream_clause

問合せに適用されるリレーションからストリームへのIStreamまたはDStream演算子を指定するには、idstream_clauseを使用します。

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

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

using_clause

DIFFERENCE USING句を使用すると、問合せのIStreamまたはDStreamの差分を簡単に検出できます。

詳細は、18.2.10項「問合せ結果の差分の検出」を参照してください。

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

usinglist

usinglist句を使用して、問合せのIStreamまたはDStreamの差分検出に使用する列を指定します。次の項目によって列を指定できます。

例20-2 DIFFERENCE USING句でのusinglistの指定

<query id="q1">
    ISTREAM (
        SELECT c1, log(c4) as logval, funct(c2, c3) FROM S [RANGE 1 NANOSECONDS]
    )    DIFFERENCE USING (c1, logval, 3)
</query>

詳細は、18.2.10項「問合せ結果の差分の検出」を参照してください。

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

xmltable_clause

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

例については、次の項を参照してください。

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

pattern_recognition_clause

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

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

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

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

詳細は、第18章「Oracle CQLの問合せ、ビューおよび結合」を参照してください。

単純な問合せの例

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

例20-3 問合せの登録

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

HAVINGの例

例20-4の問合せq4例20-5のデータ・ストリームS2があるとします。ストリームS2のスキーマは(c1 integer, c2 integer)です。例20-6は、問合せで返されるリレーションを示します。

例20-4 HAVINGの問合せ

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

例20-5 HAVINGのストリーム入力

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

例20-6 HAVINGのリレーション出力

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

BINARYの例: UNIONとUNION ALL

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

例20-7 集合演算子: UNIONの問合せ

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

例20-8 集合演算子: 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

例20-9 集合演算子: 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

例20-10 集合演算子: 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

例20-11 集合演算子: 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

例20-13例20-14のリレーションR1R2がそれぞれある場合、例20-12INTERSECT問合せq1では例20-15のリレーションが返されます。

例20-12 集合演算子: INTERSECTの問合せ

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

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

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

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

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

例20-15 集合演算子: 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

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

例20-16 集合演算子: MINUSの問合せ

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

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

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

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

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

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

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

BINARYの例: INとNOT IN

この使用法では、問合せはバイナリの問合せになります。

in_condition_set::=

in_condition_set.pngについては周囲のテキストで説明しています。

注意:

6.8.2項「メンバーシップ条件としてのINとNOT INの使用」で説明しているように、この使用法はin_condition_membershipと組み合せることはできません。


例20-20のようなビューV3V4、および問合せQ1例20-21のようなデータ・ストリームS3(スキーマ(c1 integer, c2 integer)を持つ)、例20-22のようなS4(スキーマ(c1 integer, c2 integer)を持つ)があるとします。この条件テストでは、左のリレーションの属性の数およびデータ型は、右のリレーションの属性の数およびデータ型と同じである必要があります。例20-23は、問合せによって返されるリレーションを示しています。

例20-20 集合演算としてのINとNOT IN: 問合せ

<view id="V3" schema="c1 c2"><![CDATA[ 
    select * from S3[range 2] 
]]></query>
<view id="V4" schema="c1 d1"><![CDATA[ 
    select * from S4[range 1]
]]></query>
<query id="Q1"><![CDATA[ 
     v3 not in v4
]]></query>

例20-21 集合演算としてのINとNOT IN: ストリームS3入力

Timestamp   Tuple
1000        10, 30
1000        10, 40
2000        11, 20
3000        12, 40
3000        12, 30
3000        15, 50
h 2000000

例20-22 集合演算としてのINとNOT IN: ストリームS4入力

Timestamp   Tuple
1000        10, 40
2000        10, 30
2000        12, 40
h 2000000

例20-23 集合演算としてのINとNOT IN: リレーション出力

Timestamp   Tuple Kind  Tuple
1000:       +           10,30
1000:       +           10,40
1000:       -           10,30
1000:       -           10,40
2000:       +           11,20
2000:       +           10,30
2000:       +           10,40
2000:       -           10,30
2000:       -           10,40
3000:       +           15,50
3000:       +           12,40
3000:       +           12,30
4000:       -           11,20
5000:       -           12,40
5000:       -           12,30
5000:       -           15,50

SelectとDistinctの例

例20-24の問合せq1があるとします。例20-25のデータ・ストリームSがある場合、問合せでは例20-26のリレーションが返されます。

例20-24 Select DISTINCTの問合せ

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

例20-25 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

例20-26 Select DISTINCTのストリーム出力

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

XMLTABLEの問合せの例

例20-27の問合せq1例20-28のデータ・ストリームSがあるとします。ストリームSのスキーマは(c1 xmltype)です。この問合せは、例20-29に示すリレーションを返します。詳細は、18.2.6項「XMLTableの問合せ」を参照してください。

例20-27 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>

例20-28 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>"

例20-29 XMLTABLEのリレーション出力

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

XMLネームスペースを使用するXMLTABLEの問合せの例

例20-30の問合せq1例20-31のデータ・ストリームS1があるとします。ストリームS1のスキーマは(c1 xmltype)です。この問合せは、例20-32に示すリレーションを返します。詳細は、18.2.6項「XMLTableの問合せ」を参照してください。

例20-30 XMLネームスペースを使用するXMLTABLEの問合せ

<query id="q1"><![CDATA[ 
    SELECT * from S1 
    XMLTable ( 
        XMLNAMESPACES('http://example.com' as 'e'), 
        'for $i in //e:emps return $i/e:emp' PASSING BY VALUE S1.c1 as "." 
        COLUMNS 
            empName char(16) PATH 'fn:data(@ename)', 
            empId integer PATH 'fn:data(@empno)'
        ) AS X
]]></query>

例20-31 XMLネームスペースを使用するXMLTABLEのストリーム入力

Timestamp   Tuple
3000        "<emps xmlns=\"http://example.com\"><emp empno=\"1\" deptno=\"10\" ename=\"John\" salary=\"21000\"/><emp empno=\"2\" deptno=\"10\" ename=\"Jack\" salary=\"310000\"/><emp empno=\"3\" deptno=\"20\" ename=\"Jill\" salary=\"100001\"/></emps>"
h 4000

例20-32 XMLネームスペースを使用するXMLTABLEのリレーション出力

Timestamp   Tuple Kind  Tuple
3000:       +     John,1
3000:       +     Jack,2
3000:       +     Jill,3

データ・カートリッジTABLEの問合せの例: イテレータ

例20-33に示す、メソッドMyCartridgeを持つデータ・カートリッジ(MyCartridge)があるとします。

例20-33 メソッドgetIteratorのMyCartridge

...
    public static Iterator<Integer> getIterator() {
        ArrayList<Integer> list = new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        return list.iterator();
    }
...

例20-34の問合せq1があるとします。例20-35のデータ・ストリームS0がある場合、問合せでは例20-36のリレーションが返されます。

例20-34 TABLEの問合せ: イテレータ

<query id="q1"><![CDATA[ 
    select S1.c1, S1.c2, S2.c1 
    from 
        S0[now] as S1, 
        table (com.acme.MyCartridge.getIterator() as c1) of integer as S2
]]></query>

例20-35 TABLEの問合せのストリーム入力: イテレータ

Timestamp   Tuple
1           1, abc
2           2, ab
3           3, abc
4           4, a
h 200000000

例20-36 TABLEの問合せの出力: イテレータ

Timestamp   Tuple Kind  Tuple
1:          +           1,abc,1
1:          +           1,abc,2
1:          -           1,abc,1
1:          -           1,abc,2
2:          +           2,ab,1
2:          +           2,ab,2
2:          -           2,ab,1
2:          -           2,ab,2
3:          +           3,abc,1
3:          +           3,abc,2
3:          -           3,abc,1
3:          -           3,abc,2
4:          +           4,a,1
4:          +           4,a,2
4:          -           4,a,1
4:          -           4,a,2

データ・カートリッジTABLEの問合せの例: 配列

例20-37に示す、メソッドgetArrayを持つデータ・カートリッジ(MyCartridge)があるとします。

例20-37 メソッドgetArrayのMyCartridge

...
    public static Integer[] getArray(int c1) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        return list.toArray(new Integer[2]);;
    }
...

例20-38の問合せq1があるとします。例20-39のデータ・ストリームS0がある場合、問合せでは例20-40のリレーションが返されます。

例20-38 TABLEの問合せ: 配列

<query id="q1"><![CDATA[ 
    select S1.c1, S1.c2, S2.c1 
    from 
        S0[now] as S1, 
        table (com.acme.MyCartridge.getArrayS1.c1) as c1) of integer as S2
]]></query>

例20-39 TABLEの問合せのストリーム入力: 配列

Timestamp   Tuple
1           1, abc
2           2, ab
3           3, abc
4           4, a
h 200000000

例20-40 TABLEの問合せの出力: 配列

Timestamp   Tuple Kind  Tuple
1:          +           1,abc,1
1:          +           1,abc,2
1:          -           1,abc,1
1:          -           1,abc,2
2:          +           2,ab,2
2:          +           2,ab,4
2:          -           2,ab,2
2:          -           2,ab,4
3:          +           3,abc,3
3:          +           3,abc,6
3:          -           3,abc,3
3:          -           3,abc,6
4:          +           4,a,4
4:          +           4,a,8
4:          -           4,a,4
4:          -           4,a,8

データ・カートリッジTABLEの問合せの例: コレクション

例20-41に示す、メソッドgetCollectionを持つデータ・カートリッジ(MyCartridge)があるとします。

例20-41 メソッドgetCollectionのMyCartridge

...
    public HashMap<Integer,String> developers;
    developers = new HashMap<Integer,String>();
    developers.put(2, "Mohit");
    developers.put(4, "Unmesh");
    developers.put(3, "Sandeep");
    developers.put(1, "Swagat");

    public HashMap<Integer,String> qaengineers;
    qaengineers = new HashMap<Integer,String>();
    qaengineers.put(4, "Terry");
    qaengineers.put(5, "Tony");
    qaengineers.put(3, "Junger");
    qaengineers.put(1, "Arthur");
...
    public Collection<String> getEmployees(int exp_yrs) {
        LinkedList<String> employees = new LinkedList<String>();
        employees.add(developers.get(exp_yrs));    
        employees.add(qaengineers.get(exp_yrs));
        return employees;
  }
...

例20-42の問合せq1があるとします。例20-43のデータ・ストリームS0がある場合、問合せでは例20-44のリレーションが返されます。

例20-42 TABLEの問合せ: コレクション

<query id="q1"><![CDATA[ 
    RStream(
        select S1.c1, S2.c1 
        from 
            S0[now] as S1, 
            table(S1.c2.getEmployees(S1.c1) as c1) of char as S2
    )
]]></query>

例20-43 TABLEの問合せのストリーム入力: コレクション

Timestamp   Tuple
1           1, abc
2           2, ab
3           3, abc
4           4, a
h 200000000

例20-44 TABLEの問合せの出力: コレクション

Timestamp   Tuple Kind  Tuple
1:          +           1,Swagat
1:          +           1,Arthur
2:          +           2,Mohit
3:          +           3,Sandeep
3:          +           3,Junger
4:          +           4,Unmesh
4:          +           4,Terry

ORDER BY ROWSの問合せの例

例20-45の問合せq1があるとします。例20-46のデータ・ストリームS0がある場合、問合せでは例20-47のリレーションが返されます。

例20-45 ORDER BY ROWSの問合せ

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

例20-46 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

例20-47 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文を使用します。

要件

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

構文

例20-48に示すように、<view></view>要素でビューを表します。

view要素は2つの属性を持ちます。

例20-48 <view></view>要素のビュー

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

ビュー本体の構文は問合せと同じです。詳細は、「Query」を参照してください。

次の例では、この文でサポートされる様々なセマンティクスを示します。詳細は、第18章「Oracle CQLの問合せ、ビューおよび結合」を参照してください。

ビュー登録の例

例20-49に、ビューv2を登録する方法を示します。

例20-49 ビューの登録

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