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

戻る
戻る
 
次へ
次へ
 

3 EPL リファレンス : 演算子

この節では、以下の項目について説明します。

3.1 EPL 演算子の概要

EPL の算術および論理演算子の優先順位は、Java 標準の算術および論理演算子の優先順位に従います。

3.2 算術演算子

以下の表に、使用可能な算術演算子の概要を示します。

表 3-1 算術演算子

演算子 説明

+-

単項演算子として正または負の式を示します。二項演算子として加算または減算を行います。

*/

二項演算子として乗算または除算を行います。

%

剰余の二項演算子です。


3.3 論理演算子と比較演算子

以下の表に、使用可能な論理演算子と比較演算子の概要を示します。

表 3-2 論理演算子と比較演算子

演算子 説明
NOT

後に続く条件が false の場合、true を返します。true の場合、false を返します。

OR

いずれかのコンポーネント条件が true の場合、true を返します。両方とも false の場合は、false を返します。

AND

両方のコンポーネント条件が true の場合、true を返します。いずれかが false の場合は、false を返します。

=!=<><=>=<>

比較演算子


3.4 連結演算子

以下の表に、使用可能な連結演算子の概要を示します。

表 3-3 連結演算子

演算子 説明
||

文字列の連結


3.5 二項演算子

以下の表に、使用可能な二項演算子の概要を示します。

表 3-4 二項演算子

演算子 説明
&

両オペランドが数値の場合はビット単位の AND。両オペランドがブール型の場合は条件の AND

|

両オペランドが数値の場合はビット単位の OR。両オペランドがブール型の場合は条件の OR

^

ビット単位の排他的 OR (XOR)


3.6 配列定義演算子

中括弧 { および } は、Java 配列初期化構文に準拠する配列定義演算子です。配列は、ユーザ定義関数に渡す場合や、SELECT 句で配列データを選択する場合に便利です。

配列定義は中括弧で囲まれた 0 個以上の式から成ります。配列定義内では、定数、算術式、またはイベント プロパティなどの任意の型の式を使用できます。配列定義の構文は以下のとおりです。

  { [expression [,expression [,…]]] }

actions というイベント プロパティを返す次の文について考えます。エンジンでは actions プロパティは 2 つの要素の長さを持つ java.lang.String 値の配列として作成されます。配列内の最初の要素には RFIDEvent イベントの observation プロパティ値が含まれ、2 つ目の要素には command プロパティが含まれます。

  SELECT {observation, command} AS actions 
  FROM RFIDEvent RETAIN ALL

エンジンでは配列定義内の式で返される型に基づいて、配列の型を決定します。たとえば、配列定義内のすべての式で整数値が返される場合、配列の型は java.lang.Integer[] です。すべての式で返される型が整数値や double 値のように互換性のある数値型の場合、エンジンでは配列要素の値が変換され、適切な型が返されます。この例では java.lang.Double[] です。式の型が変換不能な場合、またはオブジェクト値が返された場合は、返される配列の型は Object[] です。配列定義では null 値を使用できます。

ユーザ定義関数へのパラメータとして配列を使用すると便利です。

  SELECT * 
  FROM RFIDEvent RETAIN ALL 
  WHERE Filter.myFilter(zone, {1,2,3})

3.7 リスト演算子と範囲演算子

この節では、以下の 2 つの演算子について説明します。

3.7.1 IN 演算子

IN 演算子は、指定の値がリスト内の任意の値と一致するかどうかを決定します。演算子の構文は以下のとおりです。

  test_expression [NOT] IN (expression [,expression [,…]] )

test_expression は任意の有効な式です。IN キーワードの後に一致をテストする式のリストが続きます。省略可能な NOT キーワードでは、述部の結果が否定されます。

IN 式の結果の型は Boolean です。test_expression の値がカンマ区切りのリスト内の任意の式と等しい場合、結果の値は true です。それ以外の場合、結果の値は false です。すべての式は test_expression と同じ型または互換性のある型である必要があります。

次の例では、IN キーワードを適用して RFIDEvents の特定のコマンド タイプを選択する方法を示します。

  SELECT * 
  FROM RFIDEvent RETAIN ALL 
  WHERE command IN ('OBSERVATION', 'SIGNAL')

この文は、次と同等です。

  SELECT * 
  FROM RFIDEvent RETAIN ALL 
  WHERE command = 'OBSERVATION' OR symbol = 'SIGNAL'

3.7.2 BETWEEN 演算子

BETWEEN 演算子はテストする範囲を指定します。演算子の構文は以下のとおりです。

  test_expression [NOT] BETWEEN begin_expression AND end_expression

test_expression は任意の有効な式であり、begin_expression および end_expression で定義された式に含まれる範囲に対してテストする式です。NOT キーワードでは、述部の結果が否定されます。

BETWEEN 式の結果の型は Boolean です。test_expression の値が begin_expression の値以上であり、かつ end_expression の値以下である場合は、結果は true になります。

次の例では、BETWEEN キーワードを使用して価格が 55 ~ 60 (その値を含む) の範囲内にあるイベントを選択する方法を示します。

  SELECT * 
  FROM StockTickEvent RETAIN ALL 
  WHERE price BETWEEN 55 AND 60

BETWEEN キーワードを使用しない同等の式は、以下のとおりです。

  SELECT * 
  FROM StockTickEvent RETAIN ALL 
  WHERE price >= 55 AND price <= 60

begin_expressionend_expression は順序を逆にすることもでき、クエリへの影響はありません。たとえば、次の例は上の例と同等です。

  SELECT * 
  FROM StockTickEvent RETAIN ALL 
  WHERE price BETWEEN 60 AND 55

3.8 文字列演算子

この節では、以下の文字列演算子について説明します。

3.8.1 LIKE 演算子

LIKE 演算子は標準の SQL パターン照合を提供します。SQL パターン照合では _ を使用して任意の 1 文字を照合し、% を使用して任意の数の文字 (0 個の文字を含む) を照合できます。EPL では、デフォルトで SQL パターンの大文字と小文字が区別されます。LIKE の構文は以下のとおりです。

  test_expression [NOT] LIKE pattern_expression [ESCAPE string_literal]

test_expression は String 型または数値の結果を生成する任意の有効な式です。省略可能な NOT キーワードでは、述部の結果が否定されます。LIKE キーワードの後に、String 型の結果を生成する任意の有効な標準の SQL pattern_expression が続きます。省略可能な ESCAPE キーワードは、パターン内の _ および % 値をエスケープするのに使用されるエスケープ文字を示します。

LIKE 式の結果の型は Boolean です。test_expression の値が pattern_expression と一致する場合、結果の値は true です。それ以外の場合、結果の値は false です。LIKE キーワードの例を以下に示します。

  SELECT * 
  FROM PersonLocationEvent RETAIN ALL 
  WHERE name LIKE '%Jack%'

次の例では、WHERE 句で suffix プロパティが 1 つの _ 文字であるイベントが照合されます。

  SELECT * 
  FROM PersonLocationEvent RETAIN ALL 
  WHERE suffix LIKE '!_' ESCAPE '!'

3.8.2 REGEXP 演算子

REGEXP 演算子は Java の java.util.regex パッケージを通じて実装されている正規表現に基づいたパターン照合の形式です。REGEXP の構文は以下のとおりです。

  test_expression [NOT] REGEXP pattern_expression

test_expression は String 型または数値の結果を生成する任意の有効な式です。省略可能な NOT キーワードでは、述部の結果が否定されます。REGEXP キーワードの後に、String 型の結果を生成する任意の有効な正規表現 pattern_expression が続きます。

REGEXP 式の結果の型は Boolean です。test_expression の値が正規表現 pattern_expression と一致する場合、結果の値は true です。それ以外の場合、結果の値は false です。

REGEXP 演算子の例を以下に示します。

  SELECT * 
  FROM PersonLocationEvent RETAIN ALL 
  WHERE name REGEXP '*Jack*'

3.9 時相演算子

この節では、以下の時相演算子について説明します。

3.9.1 FOLLOWED BY 演算子

FOLLOWED BY 演算子では、まず左側の式が true になる必要があり、その場合にのみ右側の式で一致するイベントが評価されます。

たとえば、次のパターンではイベント A が検索され、これが検出された場合にイベント B が検索されます。

  A FOLLOWED BY B

イベント A の直後にイベント B が続く必要はありません。イベント A とイベント B の間で他のイベントが発生する場合でも、この式は true に評価されます。この動作が適切でない場合は、NOT 演算子を使用できます。

3.9.2 WITHIN 演算子

WITHIN 修飾子の動作はストップウォッチと同じです。関連付けられているパターン式が指定の時間内に true にならなかった場合、エンジンでは false として評価されます。WITHIN 修飾子は、節 2.4.4「時間間隔の指定」で指定されているとおり、時間間隔をパラメータとして受け取ります。

このパターンは、文の作成後 5 秒以内に A イベントが到着すると発動します。

  A WITHIN 5 seconds

このパターンは 5 秒以内に到着するすべての A イベントで発動します。

3.9.3 EVERY 演算子

EVERY 演算子は、EVERY キーワードで修飾されたサブ式が true または false に評価された場合に、パターンのサブ式を再度開始するよう通知します。EVERY 修飾子を指定しない場合は、NOT 式の内部に含まれていないパターン内の最初のイベント ストリームのソースに暗黙的な EVERY 演算子が修飾子として挿入されます。

EVERY 演算子は包含されているパターンのサブ式のファクトリのように動作します。含まれているパターンのサブ式が発動し、イベントのチェックを終了すると、EVERY によって同じイベントまたはイベント セットの以降の発生をリスンする新しいパターンのサブ式が開始されます。

EVERY 演算子内のパターンのサブ式が true になるたびに、エンジンでは新しいアクティブなサブ式が開始され、それ以降のイベント、またはパターンのサブ式に一致するタイミング条件が参照されます。

このパターンは、A イベントの後に B イベントが続いた場合に発動し、B イベント後に再び照合する試みを続行します。

  EVERY (A FOLLOWED BY B)

このパターンも A イベントの後に B イベントが続いた場合に発動しますが、A イベント後に再び照合する試みを続行します。

  EVERY A FOLLOWED BY B

このパターンの EVERY は指定が無くても暗黙的に同じ場所に付与されるため、省略可能です。