| Oracle® Fusion Middleware Oracle Complex Event Processing CQL言語リファレンス 11gリリース1 (11.1.1.6.2) B61613-04 | 
 | 
|  前 |  次 | 
この章では、Oracle Continuous Query Language (Oracle CQL)のデータ定義言語(DDL)に含まれる句のリファレンスを提供します。
Oracle CQLでは次の共通のDDL句をサポートしています。
Oracle CQL文の詳細は、第20章「Oracle CQL文」を参照してください。
目的
すべて同じ型の一連のcomplex_typeコンポーネントで構成されるOracle CQLデータ・カートリッジの型を指定するには、array_type句を使用します。
| 注意: Oracle CQLでは1次元配列のみをサポートしています。このため、 | 
要件
なし。
構文
array_type::=

(l-value::=、qualified_type_name::=)
セマンティクス
配列宣言
配列型はOracle CQLデータ・カートリッジcomplex_typeのqualified_type_nameを使用して宣言します。complextypeの配列のみがサポートされます。Oracle CQL Javaデータ・カートリッジに同等の型が定義されていなければ、Oracle CQL単純型の配列を宣言することはできません。
例については、次の項を参照してください。
配列アクセス
complex_type配列要素には、整数索引でアクセスします。索引は、データ・カートリッジ実装によって0または1で始まります。
配列へのアクセス時に、Oracle CQLで新しい配列型のインスタンスを直接インスタンス化することはサポートされていません。たとえば、次の文は使用できません。
SELECT java.lang.String[10] ...
例については、「配列アクセスの例」を参照してください。
例
次の例では、この文でサポートされる様々なセマンティクスを示します。
配列宣言の例: complex_type
例7-1に、イベント・タイプを、イベント・プロパティをパッケージcom.mypackageで定義されたOracle CQLデータ・カートリッジ複合型MyClassの配列として指定するJavaクラスとして作成する方法を示します。
例7-1 Oracle CQLデータ・カートリッジ配列をイベント・タイプで宣言
package com.myapplication.event;
import java.util.Date;
import // Oracle CQL Java data cartridge package?
public final class MarketEvent {
    private final String symbol;
    private final Double price;
    private final com.mypackage.MyClass[] a1;
    public MarketEvent(...) {
        ...
        }
    ...
}
配列宣言の例: Oracle CQL単純型
Oracle CQLデータ・カートリッジの型の配列のみがサポートされています。Oracle CQL単純型の配列は宣言できません。
int[] a1
ただし、Oracle CQL Javaデータ・カートリッジを使用し、単純型に相当するJavaの型(存在する場合)を参照することで、この問題を解決できます。
int@java[] a1
@構文の詳細は、link::=を参照してください。
配列アクセスの例
例7-2に、Oracle CQLデータ・カートリッジ複合型の配列アクセスを使用する、次の問合せを登録する方法を示します。
ビューv1は配列a1の3番目の要素にアクセスします。この配列には、例7-1で定義された、Oracle CQLデータ・カートリッジ複合型com.mypackage.MyClassのインスタンスが含まれます。
問合せq1は配列field1の最初の要素にアクセスします。この配列は、Oracle CQLデータ・カートリッジ複合型a1で定義されます。
目的
ストリーム要素または疑似列を指定するには、attr句を使用します。
attr句は次のOracle CQL文で使用できます。
要件
なし。
構文

(identifier::=、pseudo_column::=)

セマンティクス
identifier
ストリーム要素の識別子を指定します。
指定できるものは、次のとおりです。
StreamOrViewName.ElementName
ElementName
CorrelationName.PseudoColumn
PseudoColumn
例については、「例」を参照してください。
構文については、identifier::=(親: attr::=)を参照してください。
pseudo_column
特定のストリーム要素、すべてのストリーム要素、またはMATCH_RECOGNIZE句の相関名に関連するストリーム要素に関連付けられているタイムスタンプを指定します。
例については、次の項を参照してください。
詳細は、第3章「疑似列」を参照してください。
構文については、pseudo_column::=(親: attr::=)を参照してください。
例
例7-3に示すストリームがある場合、有効な属性の句は次のとおりです。
ItemTempStream.temp
temp
B.element_time
element_time
例7-3 attr句
<view id="ItemTempStream" schema="itemId temp"><![CDATA[ 
    IStream(select * from ItemTemp) 
]]></view>
<query id="detectPerish"><![CDATA[ 
  select its.itemId
  from ItemTempStream MATCH_RECOGNIZE (
      PARTITION BY itemId
      MEASURES A.itemId as itemId
      PATTERN (A B* C)
      DEFINE
          A  AS  (A.temp >= 25),
          B  AS  ((B.temp >= 25) and (to_timestamp(B.element_time) - to_timestamp(A.element_time) < INTERVAL "0 00:00:05.00" DAY TO SECOND)),
          C  AS  (to_timestamp(C.element_time) - to_timestamp(A.element_time) >= INTERVAL "0 00:00:05.00" DAY TO SECOND)
  ) as its
]]></query>
目的
ストリーム要素の識別子とデータ型を定義するには、attrspec句を使用します。
attrspec句は次のOracle CQL文で使用できます。
要件
なし。
構文

(identifier::=、fixed_length_datatype::=、variable_length_datatype::=)
セマンティクス
identifier
ストリーム要素の識別子を指定します。
構文については、identifier::=(親: attrspec::=)を参照してください。
fixed_length_datatype
ストリーム要素のデータ型を固定長のデータ型として指定します。
構文については、fixed_length_datatype::=(親: attrspec::=)を参照してください。
variable_length_datatype
ストリーム要素のデータ型を可変長のデータ型として指定します。
構文については、variable_length_datatype::=(親: attrspec::=)を参照してください。
integer
可変長データ型の長さを指定します。
構文については、attrspec::=を参照してください。
目的
次の項目を定義するOracle CQLデータ・カートリッジの型を指定するには、complex_type句を使用します。
メンバー・フィールド(静的またはインスタンス)
メンバー・メソッド(静的またはインスタンス)
コンストラクタ
フィールドの型、およびメソッドの戻り値の型およびパラメータ・リストは、複合型または単純型です。
複合型は修飾型名(ピリオド「.」で区切られた一連の識別子)と所属するデータ・カートリッジのオプション名(link::=を参照)で識別されます。リンク名が指定されていない場合、Oracle CEPは複合型がJavaクラスであると見なします(複合型がJavaデータ・カートリッジに所属すると見なします)。
要件
complextypeを提供するOracle CQLデータ・カートリッジが、実行時にOracle CEPサーバーによってロードされている必要があります。
構文
complex_type::=

(attr::=、fieldname::=、methodname::=、param_list::=、qualified_type_name::=)
fieldname::=

セマンティクス
fieldname
fieldname句を使用して、Oracle CQLデータ・カートリッジ複合型の静的フィールドを指定します。
構文: fieldname::=(親: complex_type::=)。
フィールド・アクセス
ORDER BY句内の式で生成された複合型l-valueは使用できません。現在、SELECT句およびWHERE句内の式のみ、複合型l-valueを生成できます。
qualified_type_nameを使用してアクセスできるのは、静的フィールドのみです。静的でないフィールドにアクセスするには、まず複合型をインスタンス化する必要があります(「コンストラクタ呼出し」を参照)。
例については、「フィールド・アクセスの例: complex_type」を参照してください。
メソッド・アクセス
複合型のセッター・メソッドにアクセスすると、他の問題が発生する可能性があります。他の問題が発生すると、同時実行性と共有の機会が低下します。たとえば、セッター・メソッドを呼び出して、ビューに依存する他の問合せと共有しているビュー属性(イベント・プロパティなど)の値を変更すると、メソッド呼出しによって発生した他の問題により、問合せの結果が変わる可能性があります。
qualified_type_nameを使用してアクセスできるのは、静的メソッドのみです。静的でないフィールドにアクセスするには、まず複合型をインスタンス化する必要があります(「コンストラクタ呼出し」を参照)。
例については、「メソッド・アクセスの例: complex_type」を参照してください。
コンストラクタ呼出し
qualified_type_nameを使用してアクセスできるのは、静的フィールドおよび静的メソッドのみです。静的でないフィールドまたは静的でないメソッドにアクセスするには、まずいずれかのコンストラクタを呼び出して、複合型をインスタンス化する必要があります。
例については、「コンストラクタ呼出しの例: complex_type」を参照してください。
例
次の例では、この文でサポートされる様々なセマンティクスを示します。
フィールド・アクセスの例: complex_type
例7-4に、Oracle CQLデータ・カートリッジ複合型のフィールド・アクセスを使用する、次の問合せを登録する方法を示します。
問合せq1は、Oracle CQLデータ・カートリッジ複合型a1からフィールドmyFieldにアクセスします。
問合せq2は、メソッドfunction-returning-objectから返されたOracle CQLデータ・カートリッジ複合型で定義されたフィールドmyFieldにアクセスします。メソッド・アクセスの詳細は、「メソッド・アクセス」を参照してください。
問合せq3は、Oracle CQLデータ・カートリッジ複合型a1で定義されたOracle CQLデータ・カートリッジ複合型myFieldで定義されたフィールドmyNestedFieldにアクセスします。
問合せq4は、パッケージcom.myPackageのクラスMyTypeで定義された静的フィールドmyStaticFieldにアクセスします。静的フィールドの場合、リンク(@myCartridge)が必要です。
例7-4 データ・カートリッジのフィールド・アクセス
<query id="q1"><![CDATA[ 
    SELECT a1.myField …
]]></query>
<query id="q2"><![CDATA[ 
    SELECT function-returning-object().myField …
]]></query>
<query id="q3"><![CDATA[ 
    SELECT a1.myField.myNestedField …
]]></query>
<query id="q4"><![CDATA[ 
    SELECT com.myPackage.MyType.myStaticField@myCartridge …
]]></query>
メソッド・アクセスの例: complex_type
例7-5に、Oracle CQLデータ・カートリッジ複合型のメソッド・アクセスを使用する、次の問合せを登録する方法を示します。
問合せq1は、Oracle CQLデータ・カートリッジ複合型a1で定義されたメソッドmyMethodにアクセスします。この問合せは、空のパラメータ・リストでメソッドにアクセスします。
問合せq2は、問合せq1とは別の署名を使用して、Oracle CQLデータ・カートリッジ複合型a1で定義されたメソッドmyMethodにアクセスします。このケースでは、問合せは3つの引数パラメータ・リストでメソッドにアクセスします。
問合せq3は、Oracle CQLデータ・カートリッジ複合型MyTypeで定義されたメソッドmyStaticMethodにアクセスします。この問合せは、1つのパラメータでメソッドにアクセスします。静的メソッドの場合、リンク(@myCartridge)が必要です。
例7-5 データ・カートリッジのメソッド・アクセス
<query id="q1"><![CDATA[ 
    SELECT a1.myMethod() … 
]]></query>
<query id="q2"><![CDATA[ 
    SELECT a1.myMethod(a2, “foo”, 10) …
]]></query>
<query id="q3"><![CDATA[ 
    SELECT myPackage.MyType.myStaticMethod@myCartridge("foo") …
]]></query>
コンストラクタ呼出しの例: complex_type
例7-6に、Oracle CQLデータ・カートリッジ複合型のコンストラクタ呼出しを使用する、次の問合せを登録する方法を示します。
問合せq1は、パッケージjava.langで定義されたコンストラクタStringを呼び出します。このケースでは、問合せは空の引数リストでコンストラクタを呼び出します。
問合せq2は、パッケージjava.langで定義されたコンストラクタStringを呼び出します。このケースでは、問合せは1つの引数パラメータ・リストでコンストラクタを呼び出し、返されたStringインスタンスで定義された静的でないメソッドsubstringを呼び出します。
目的
big integerの数値リテラルを指定するには、const_bigint句を使用します。
const_bigint句は次のOracle CQL文で使用できます。
詳細は、2.3.2項「数値リテラル」を参照してください。
要件
なし。
構文

目的
整数の数値リテラルを指定するには、const_int句を使用します。
const_int句は次のOracle CQL文で使用できます。
詳細は、2.3.2項「数値リテラル」を参照してください。
要件
なし。
構文

目的
定数のStringテキスト・リテラルを指定するには、const_string句を使用します。
const_string句は次のOracle CQL文で使用できます。
詳細は、2.3.1項「テキスト・リテラル」を参照してください。
要件
なし。
構文

目的
リテラル値を指定するには、const_value句を使用します。
const_value句は次のOracle CQL文で使用できます。
詳細は、2.3項「リテラル」を参照してください。
要件
なし。
構文

(interval_value::=、const_string::=、const_int::=、const_bigint::=)

セマンティクス
interval_value
期間の定数値を引用符付きの文字列として指定します。例:
INTERVAL '4 5:12:10.222' DAY TO SECOND(3)
詳細は、2.3.4項「期間リテラル」を参照してください。
構文については、interval_value::=(親: const_value::=)を参照してください。
const_string
引用符付きのString定数値を指定します。
詳細は、2.3.1項「テキスト・リテラル」を参照してください。
構文については、const_string::=(親: interval_value::=およびconst_value::=)を参照してください。
null
null定数値を指定します。
詳細は、2.5項「Null」を参照してください。
const_int
int定数値を指定します。
詳細は、2.3.2項「数値リテラル」を参照してください。
bigint
bigint定数値を指定します。
詳細は、2.3.2項「数値リテラル」を参照してください。
float
float定数値を指定します。
詳細は、2.3.2項「数値リテラル」を参照してください。
目的
既存のOracle CQLスキーマ オブジェクトを参照するには、identifier句を使用します。
identifier句は次のOracle CQL文で使用できます。
要件
スキーマ・オブジェクトが存在している必要があります。
構文

(const_string::=、unreserved_keyword::=)

セマンティクス
const_string
識別子をStringとして指定します。
詳細は、2.8.1項「スキーマ・オブジェクトのネーミング・ルール」を参照してください。
構文については、identifier::=を参照してください。
[A-Z]
識別子を単一の大文字として指定します。
構文については、identifier::=を参照してください。
unreserved_keyword
詳細は、以下を参照してください。
構文については、unreserved_keyword::=(親: identifier::=)を参照してください。
reserved_keyword
次の名前は予約キーワードであるため、識別子として使用できません。add、aggregate、all、alter、and、application、as、asc、avg、between、bigint、binding、binjoin、binstreamjoin、boolean、by、byte、callout、case、char、clear、columns、constraint、content、count、create、day、days、decode、define、derived、desc、destination、disable、distinct、document、double、drop、dstream、dump、duration、duration、element_time、else、enable、end、evalname、event、events、except、external、false、first、float、from、function、group、groupaggr、having、heartbeat、hour、hours、identified、implement、in、include、index、instance、int、integer、intersect、interval、is、istream、java、key、language、last、level、like、lineage、logging、match_recognize、matches、max、measures、metadata_query、metadata_system、metadata_table、metadata_userfunc、metadata_view、metadata_window、microsecond、microseconds、millisecond、milliseconds、min、minus、minute、minutes、monitoring、multiples、nanosecond、nanoseconds、not、now、null、nulls、object、of、on、operator、or、order、orderbytop、output、partition、partitionwin、partnwin、passing、path、pattern、patternstrm、patternstrmb、prev、primary、project、push、query、queue、range、rangewin、real、register、relation、relsrc、remove、return、returning、rows、rowwin、rstream、run、run_time、sched_name、sched_threaded、schema、second、seconds、select、semantics、set、silent、sink、slide、source、spill、start、stop、storage、store、stream、strmsrc、subset、sum、synopsis、system、systemstate、then、time、time_slice、timeout、timer、timestamp、timestamped、to、true、trusted、type、unbounded、union、update、using、value、view、viewrelnsrc、viewstrmsrc、wellformed、when、where、window、xmlagg、xmlattributes、xmlcolattval、xmlconcat、xmldata、xmlelement、xmlexists、xmlforest、xmlparse、xmlquery、xmltable、xmltypeまたはxor。
目的
Oracle CQLデータ・カートリッジ複合型のメソッドを指定するには、methodname句を使用します。
methodname句は次のOracle CQL文で使用できます。
要件
なし。
構文
methodname::=

目的
1つ以上の引数をストリーム要素を使用する算術式として指定するには、non_mt_arg_list句を使用します。1つ以上の引数をストリーム要素として直接指定するには、non_mt_attr_list::=を参照してください。
non_mt_arg_list句は次のOracle CQL文で使用できます。
要件
参照しているストリーム要素がある場合は、ストリームが存在している必要があります。
構文

セマンティクス
arith_expr
引数値に解決される算術式を指定します。
目的
1つ以上の引数をストリーム要素として直接指定するには、non_mt_attr_list句を使用します。1つ以上の引数を、ストリーム要素を使用する算術式として指定するには、non_mt_arg_list::=を参照してください。
non_mt_attr_list句は次のOracle CQL文で使用できます。
要件
参照しているストリーム要素がある場合は、ストリームが存在している必要があります。
構文

(attr::=)
セマンティクス
attr
引数をストリーム要素として直接指定します。
目的
1つ以上のストリーム要素を名前で指定するには、non_mt_attrname_list句を使用します。
non_mt_attrname_list句は次のOracle CQL文で使用できます。
要件
参照しているストリーム要素がある場合は、ストリームが存在している必要があります。
構文

セマンティクス
identifier
ストリーム要素を名前で指定します。
目的
ストリーム要素の識別子とデータ型を定義する1つ以上の属性仕様を指定するには、non_mt_attrspec_list句を使用します。
non_mt_attrspec_list句は次のOracle CQL文で使用できます。
要件
参照しているストリーム要素がある場合は、ストリームが存在している必要があります。
構文

セマンティクス
attrspec
属性の識別子とデータ型を指定します。
目的
AND、OR、XORおよびNOTの論理演算子の任意の組合せを使用して1つ以上の条件を指定するには、non_mt_cond_list句を使用します。
non_mt_cond_list句は次のOracle CQL文で使用できます。
詳細は、第6章「条件」を参照してください。
要件
なし。
構文

(non_mt_cond_list::=、condition::=、between_condition::=)
セマンティクス
condition
比較条件を指定します。
詳細は、6.2項「比較条件」を参照してください。
構文については、condition::=(親: non_mt_cond_list::=)を参照してください。
between_condition
範囲に含まれているかをテストする条件を指定します。
詳細は、6.5項「範囲条件」を参照してください。
構文については、between_condition::=(親: non_mt_cond_list::=)を参照してください。
目的
関数パラメータ・リストに類似した、Oracle CQLデータ・カートリッジ複合型のメソッドまたはコンストラクタのゼロ個以上のパラメータのカンマ区切りリストを指定するには、param_list句を使用します。
param_list句は次のOracle CQL文で使用できます。
要件
なし。
構文
param_list::=

目的
java.lang.Stringなど、Oracle CQLデータ・カートリッジ複合型の完全指定型名を指定するには、qualified_type_name句を使用します。Oracle CQLデータ・カートリッジの静的フィールド、静的メソッドまたはコンストラクタを呼び出す場合は、qualified_type_nameを使用します。
デフォルト・パッケージはありません。たとえば、クラスStringを参照する場合は、Javaデータ・カートリッジを使用してjava.langを指定する必要があります。予約語と修飾型を区別するには、すべての修飾型に少なくとも2つの識別子が必要であり、修飾名に少なくとも1つのピリオド(.)を使用する必要があります。
qualified_type_name句は次のOracle CQLデータ・カートリッジ文で使用できます。
要件
なし。
構文
qualified_type_name::=

(arith_expr::=、package_name::=、class_name::=、link::=)
package_name::=

class_name::=

セマンティクス
package_name
package_name句を使用して、Oracle CQLデータ・カートリッジ・パッケージ名を指定します。
構文: package_name::=(親: qualified_type_name::=)
class_name
class_name句を使用して、Oracle CQLデータ・カートリッジClassの名前を指定します。
構文: class_name::=(親: qualified_type_name::=)
目的
既存のOracle CQL問合せを名前で参照するには、query_ref句を使用します。
次のOracle CQL文でOracle CQL問合せを参照できます。
要件
問合せが存在している必要があります (「Query」を参照)。
構文

セマンティクス
identifier
問合せの名前を指定します。これは、以降のOracle CQL文で問合せを参照するのに使用する名前です。
目的
日数、時間数、分数、秒数、ミリ秒数またはナノ秒数で期間を定義するにはtime_spec句を使用します。
デフォルト: 単位を指定しない場合、Oracle CEPでは[second|seconds]が想定されます。
time_spec句は次のOracle CQL文で使用できます。
要件
なし。
構文

time_unit::=

セマンティクス
integer
時間単位の数を指定します。
time_unit
時間単位を指定します。
目的
1つ以上のXML属性を指定するには、xml_attribute_list句を使用します。
xml_attribute_list句は次のOracle CQL文で使用できます。
要件
参照しているストリーム要素がある場合は、ストリームが存在している必要があります。
構文

セマンティクス
xml_attr_list
1つ以上のXML属性を指定します(例7-7を参照)。
例7-7 xml_attr_list
<query id="tkdata51_q1"><![CDATA[ 
    select XMLELEMENT(NAME "S0", XMLATTRIBUTES(tkdata51_S0.c1 as "C1", tkdata51_S0.c2 as "C2"), 
        XMLELEMENT(NAME "c1_plus_c2", c1+c2), XMLELEMENT(NAME "c2_plus_10", c2+10.0)) from tkdata51_S0 [range 1]
]]>
</query>
構文については、xml_attr_list::=(親: xml_attribute_list::=)を参照してください。
目的
1つ以上のXML属性を指定するには、xml_attr_list句を使用します。
xml_attr_list句は次のOracle CQL文で使用できます。
要件
参照しているストリーム要素がある場合は、ストリームが存在している必要があります。
構文

xml_attr::=

(const_string::=、arith_expr::=、attr::=)
セマンティクス
xml_attr
XML属性を指定します。
構文については、xml_attr::=(親: xml_attr_list::=)を参照してください。
目的
XML問合せに1つ以上の引数を指定するには、xqryargs_list句を使用します。
non_mt_arg_list句は次のOracle CQL文で使用できます。
要件
参照しているストリーム要素がある場合は、ストリームが存在している必要があります。
構文

xqryarg::=

(const_string::=、arith_expr::=)
セマンティクス
xqryarg
ストリーム要素の値をXQuery変数またはXPath演算子にバインドする句。
1つ以上のストリーム要素を使用する任意の算術式を(arith_expr::=を参照)、指定されたXQueryの変数またはXPath演算子("."など)に引用符付きの文字列としてバインドできます。
構文については、xqryarg::=(親: xqryargs_list::=)を参照してください。