ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Event Processing EPL言語リファレンス
11g リリース1 (11.1.1.7)
B55579-06
  目次へ移動
目次

前
 
次
 

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

この章では、イベント処理言語(EPL)の演算子のリファレンスについて説明します。EPLは非推奨になったことに注意してください。新たな開発ではOracle Continuous Query Language (Oracle CQL)を使用する必要があります。

この章には次の項が含まれます:

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は指定が無くても暗黙的に同じ場所に付与されるため、省略可能です。