この章では、Oracle CEPでサポートされる様々なOracle CQLデータ定義言語(DDL)とデータ操作言語(DML)の文について説明します
Oracle CQLでは次のDDL文をサポートしています。
注意: ストリーム入力の例で、h で始まる行(h 3800 など)はハートビート入力タプルです。これは、ハートビート値よりも小さいタイムスタンプを持つこれ以上の入力がないことをOracle CEPに通知します。 |
詳細は、以下を参照してください。
目的
後続のOracle CQL文のidentifier
で参照されるOracle CQL問合せを定義するには、query文を使用します。
要件
問合せがストリームまたはビューを参照する場合は、ストリームまたはビューが存在している必要があります。
問合せがすでに存在する場合は、Oracle CEPサーバーで例外がスローされます。
詳細は、以下を参照してください。
構文
例20-1に示すように、<query></query>
要素で問合せを表します。
query
要素は1つの属性を持ちます。
id
: query
要素のid
属性としてidentifier
を指定します。
id
値はidentifier::=で指定される仕様に準拠する必要があります。
例20-1 <query></query>要素の問合せ
<query id="q0"><![CDATA[ select * from OrderStream where orderAmount > 10000.0 ]]></query>
query::=
(sfw_block::=、idstream_clause::=、binary::=、using_clause::=)
sfw_block::=
(select_clause::=、from_clause::=、opt_where_clause::=、opt_group_by_clause::=、order_by_clause::=、order_by_top_clause::=、opt_having_clause::=)
projterm::=
from_clause::=
(non_mt_relation_list::=、relation_variable::=、non_mt_cond_list::=)
(identifier::=、window_type::=、pattern_recognition_clause::=、xmltable_clause::=、object_expr::=、datatype::=、table_clause::=)
window_type::=
(identifier::=、non_mt_attr_list::=、time_spec::=)
table_clause::=
(object_expr::=、identifier::=、datatype::=)
(pattern_partition_clause::=、order_by_list::=)
orderterm::=
(order_expr::=、null_spec::=、asc_desc::=)
null_spec::=
asc_desc::=
binary::=
using_clause::=
usinglist::=
(xmlnamespace_clause::=、const_string::=、xqryargs_list::=、xtbl_cols_list::=)
セマンティクス
named_query
Oracle CQL問合せ文自体を指定します(「query」を参照)。
構文については、「Query」を参照してください。
query
Oracle CQL問合せは、次の任意の句から作成できます。
sfw_block
: select、fromおよびその他のオプションの句(「sfw_block」を参照)。
binary
: オプションの集合演算の句(「binary」を参照)。
xstream_clause
: sfw_block
またはbinary
句にオプションのリレーションからストリームへの演算子を適用して、問合せが結果を返す方法を制御します(「idstream_clause」を参照)。
構文については、query::=を参照してください。
sfw_block
Oracle CQL問合せのselect、fromおよびその他のオプション句を指定します。次の任意の句を指定できます。
select_clause
: 指定したストリームまたはビューから選択されるストリーム要素(「select_clause」を参照)。
from_clause
: 問合せで選択されるストリームまたはビュー(「from_clause」を参照)。
opt_where_clause
: 問合せが選択した内容に適用されるオプションの条件(「opt_where_clause」を参照)。
opt_group_by_clause
: 問合せの結果に適用されるオプションのグループ化条件(「opt_group_by_clause」を参照)。
order_by_clause
: 問合せの結果に適用されるオプションの並べ替え条件(「order_by_clause」を参照)。
order_by_top_clause
: 問合せの結果の上位n
個の要素に適用されるオプションの並べ替え条件(「order_by_top_clause」を参照)。
opt_having_clause
: 返されたストリーム要素のグループを指定されたcondition
がTRUE
のグループに制限するために問合せで使用されるオプションの句(「opt_having_clause」を参照)。
構文については、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
と返されたリレーションの別名を指定します。
次の点に注意してください。
データ・カートリッジ・メソッドは、配列型またはCollection
型を返す必要があります。
TABLE
関数句とストリームを結合する必要があります。
例については、次の項を参照してください。
詳細は、以下を参照してください。
構文については、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
個の要素を選択します。この句では常にリレーションが返されます。
次の問合せの例を考えます。
任意の時点で、次のサンプル問合せの出力は、ストリーム全体の上位10個の銘柄記号が含まれるリレーションになります。
select stock_symbols from StockQuotes order by stock_price rows 10
任意の時点で、次のサンプル問合せの出力は、過去1時間のデータの上位10個の銘柄記号が含まれるリレーションになります。
select stock_symbols from StockQuotes[range 1 hour] order by stock_price rows 10
詳細は、以下を参照してください。
構文については、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
を使用して、返されたストリーム要素のグループを指定されたcondition
がTRUE
のグループに制限します。この句を省略すると、Oracle CEPではすべてのグループのサマリ結果が返されます。
GROUP
BY
と HAVING
はopt_where_clause
の後に指定します。GROUP
BY
とHAVING
の両方を指定する場合は、どちらの順序でも指定できます。
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
の属性名c1
を示しています。
別名: 別名が指定されている式の結果を含める場合に、このオプションを使用します。
例20-2は、DIFFERENCE USING
句のusinglist
の別名logval
を示しています。
位置: 別名が指定されていない式の結果を含める場合に、このオプションを使用します。
位置は、左から右に読み取る、1で始まる正の整数の、定数として指定します。
例20-2では、位置(3)によって、DIFFERENCE USING
句のusinglist
の式の結果funct(c2, c3)
を示しています。
例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>
BINARYの例: UNIONとUNION ALL
例20-8と例20-9のリレーションR1
とR2
がそれぞれある場合、例20-7のUNION
問合せq1
では例20-10のリレーションが返され、例20-7のUNION 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のリレーションR1
とR2
がそれぞれある場合、例20-12のINTERSECT
問合せq1
では例20-15のリレーションが返されます。
例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のリレーションR1
とR2
がそれぞれある場合、例20-16のMINUS
問合せq1
では例20-19のリレーションが返されます。
例20-17 集合演算子: MINUSのリレーション入力R1
Timestamp Tuple Kind Tuple 1500: + 10,40 2000: + 10,30 2000: - 10,40 3000: - 10,30
BINARYの例: INとNOT IN
この使用法では、問合せはバイナリの問合せになります。
例20-20のようなビューV3
とV4
、および問合せ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-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
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-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-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-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>
目的
後続のOracle CQL文のidentifier
で参照される、基本のストリームまたはリレーションに対するビューを作成するには、view文を使用します。
要件
詳細は、以下を参照してください。
構文
例20-48に示すように、<view></view>
要素でビューを表します。
view
要素は2つの属性を持ちます。
id
: view
要素のid
属性としてidentifier
を指定します。
id
値はidentifier::=で指定される仕様に準拠する必要があります。
schema
: オプションで、属性名のスペース区切りリストとしてviewのスキーマを指定します。
Oracle CEPサーバーは型を推測します。
例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
を登録する方法を示します。