| Oracle® Fusion Middleware Oracle Event Processing Oracle CQL言語リファレンス 12c リリース(12.1.3) E57533-04 |
|
![]() 前へ |
![]() 次へ |
この章では、Oracle Continuous Query Language (Oracle CQL)のデータ定義言語(DDL)に含まれる句のリファレンスを提供します。
この章の内容は次のとおりです。
目的
すべて同じ型の一連のcomplex_typeコンポーネントで構成されるOracle CQLデータ・カートリッジの型を指定するには、array_type句を使用します。
注意:
Oracle CQLでは1次元配列のみをサポートしています。このため、java.lang.String[]は使用できますが、java.lang.String[][]は使用できません。
前提条件
なし。
構文
array_type::=

セマンティクス
配列宣言
配列型はOracle CQLデータ・カートリッジcomplex_typeのqualified_type_nameを使用して宣言します。complextypeの配列のみがサポートされます。Oracle CQL Javaデータ・カートリッジに同等の型が定義されていなければ、Oracle CQL単純型の配列を宣言することはできません。
配列アクセス
complex_type配列要素には、整数索引でアクセスします。索引は、データ・カートリッジ実装によって0または1で始まります。
配列へのアクセス時に、Oracle CQLで新しい配列型のインスタンスを直接インスタンス化することはサポートされていません。たとえば、次の文は使用できません。
SELECT java.lang.String[10] ...
例
次の例は、Javaクラスとしてイベント・タイプを作成する方法を示しています。このJavaクラスは、パッケージcom.mypackageで定義されたOracle CQLデータ・カートリッジ複合型MyClassの配列としてイベント・プロパティを指定します。
package com.myapplication.event;
import java.util.Date;
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::=を参照してください。
配列アクセスの例
次の例に、Oracle CQLデータ・カートリッジ複合型の配列アクセスを使用する、次の問合せを登録する方法を示します。
ビューv1は配列a1の3番目の要素にアクセスします。この配列には、Oracle CQLデータ・カートリッジ複合型com.mypackage.MyClassのインスタンスが含まれます。
問合せq1は配列field1の最初の要素にアクセスします。この配列は、Oracle CQLデータ・カートリッジ複合型a1で定義されます。
<view id="v1" schema="symbol price a1"><![CDATA[ IStream(select symbol, price, a1[3] from S1[range 10 slide 10]) ]]></view> <query id="q1"><![CDATA[ SELECT a1.field1[1] … ]]></query>
前提条件
なし。
セマンティクス
identifier
ストリーム要素の識別子を指定します。
次を指定できます
StreamOrViewName.ElementName
ElementName
CorrelationName.PseudoColumn
PseudoColumn
例については、「例」を参照してください。
例7-1 pseudo_column
特定のストリーム要素、すべてのストリーム要素、またはMATCH_RECOGNIZE句の相関名に関連するストリーム要素に関連付けられているタイムスタンプを指定します。
例については、次の項を参照してください。
詳細については、「疑似列」を参照してください。
例
ストリームとそれに対応する有効な属性句を次に示します。
ItemTempStream.temp
temp
B.element_time
element_time
<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句を使用します。
前提条件
なし。
セマンティクス
identifier
ストリーム要素の識別子を指定します。
fixed_length_datatype
ストリーム要素のデータ型を固定長のデータ型として指定します。
構文については、「fixed_length_datatype::=」を参照してください。
variable_length_datatype
ストリーム要素のデータ型を可変長のデータ型として指定します。
構文については、「variable_length_datatype::=」を参照してください。
integer
可変長データ型の長さを指定します。
目的
次の項目を定義するOracle CQLデータ・カートリッジの型を指定するには、complex_type句を使用します。
メンバー・フィールド(静的またはインスタンス)
メンバー・メソッド(静的またはインスタンス)
コンストラクタ
フィールドの型、およびメソッドの戻り値の型およびパラメータ・リストは、複合型または単純型です。
複合型は修飾型名(ピリオド「.」で区切られた一連の識別子)と所属するデータ・カートリッジのオプション名(link::=を参照)で識別されます。リンク名が指定されていない場合、Oracle Event Processingでは複合型はJavaクラスであると想定します(つまり、Oracle Event Processingでは複合型はJavaデータ・カートリッジに属すると想定します)。
前提条件
complextypeを提供するOracle CQLデータ・カートリッジが、実行時にOracle Event Processingサーバーによってロードされている必要があります。
セマンティクス
fieldname
fieldname句を使用して、Oracle CQLデータ・カートリッジ複合型の静的フィールドを指定します。
フィールド・アクセス
ORDER BY句内の式で生成された複合型l-valueは使用できません。現在、SELECT句およびWHERE句内の式のみ、複合型l-valueを生成できます。
qualified_type_nameを使用してアクセスできるのは、静的フィールドのみです。静的でないフィールドにアクセスするには、まず、複合型をインスタンス化しておく必要があります。
メソッド・アクセス
複合型のセッター・メソッドにアクセスすると、他の問題が発生する可能性があります。他の問題が発生すると、同時実行性と共有の機会が低下します。たとえば、セッター・メソッドを呼び出して、ビューに依存する他の問合せと共有しているビュー属性(イベント・プロパティなど)の値を変更すると、メソッド呼出しによって発生した他の問題により、問合せの結果が変わる可能性があります。
qualified_type_nameを使用してアクセスできるのは、静的メソッドのみです。静的でないフィールドにアクセスするには、まず、複合型をインスタンス化しておく必要があります。
コンストラクタ呼出し
qualified_type_nameを使用してアクセスできるのは、静的フィールドおよび静的メソッドのみです。静的でないフィールドまたは静的でないメソッドにアクセスするには、まずいずれかのコンストラクタを呼び出して、複合型をインスタンス化する必要があります。
例
フィールド・アクセスの例: complex_type
次の例に、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)が必要です。
<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
次の例に、Oracle CQLデータ・カートリッジ複合型のメソッド・アクセスを使用する、次の問合せを登録する方法を示します。
問合せq1は、Oracle CQLデータ・カートリッジ複合型a1で定義されたメソッドmyMethodにアクセスします。この問合せは、空のパラメータ・リストでメソッドにアクセスします。
問合せq2は、問合せq1とは別の署名を使用して、Oracle CQLデータ・カートリッジ複合型a1で定義されたメソッドmyMethodにアクセスします。このケースでは、問合せは3つの引数パラメータ・リストでメソッドにアクセスします。
問合せq3は、Oracle CQLデータ・カートリッジ複合型MyTypeで定義されたメソッドmyStaticMethodにアクセスします。この問合せは、1つのパラメータでメソッドにアクセスします。静的メソッドの場合、リンク(@myCartridge)が必要です。
<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
次の例に、Oracle CQLデータ・カートリッジ複合型のコンストラクタ呼出しを使用する、次の問合せを登録する方法を示します。
問合せq1は、パッケージjava.langで定義されたコンストラクタStringを呼び出します。このケースでは、問合せは空の引数リストでコンストラクタを呼び出します。
問合せq2は、パッケージjava.langで定義されたコンストラクタStringを呼び出します。このケースでは、問合せは1つの引数パラメータ・リストでコンストラクタを呼び出し、返されたStringインスタンスで定義された静的でないメソッドsubstringを呼び出します。
<query id="q1"><![CDATA[ SELECT java.lang.String() … ]]></query> <query id="q2"><![CDATA[ SELECT java.lang.String(“food").substring(0,1) … ]]></query>
目的
big integerの数値リテラルを指定するには、const_bigint句を使用します。
const_bigint句は次のOracle CQL文で使用できます。
詳細は、「数値リテラル」を参照してください。
前提条件
なし。
構文
const_bigint::=

前提条件
なし。
構文
const_int::=

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

前提条件
なし。
例7-2 interval_value
期間の定数値を引用符付きの文字列として指定します。次に例を示します。
INTERVAL '4 5:12:10.222' DAY TO SECOND(3)
詳細は、「期間リテラル」を参照してください。
const_string
引用符付きのString定数値を指定します。
詳細は、「テキスト・リテラル」を参照してください。
null
null定数値を指定します。
詳細は、「Null」を参照してください。
const_int
int定数値を指定します。
詳細は、「数値リテラル」を参照してください。
bigint
bigint定数値を指定します。
詳細は、「数値リテラル」を参照してください。
float
float定数値を指定します。
詳細は、「数値リテラル」を参照してください。
目的
既存のOracle CQLスキーマ オブジェクトを参照するには、identifier句を使用します。
identifier句は次のOracle CQL文で使用できます。
前提条件
スキーマ・オブジェクトが存在している必要があります。
例7-3 unreserved_keyword::=

セマンティクス
const_string
識別子をStringとして指定します。
詳細は、「スキーマ・オブジェクトのネーミング・ルール」を参照してください。
[A-Z]
識別子を単一の大文字として指定します。
unreserved_keyword
識別子として使用できる名前です。
詳細は、次を参照してください。
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。
目的
multi_paramspec_list句は、1つのストリーム要素の識別子と複数のストリーム要素のデータ型を定義するために使用します。ストリーム要素の識別子とデータ型を指定するには、paramspec句を使用します。
前提条件
このストリームは事前に存在している必要があります。
構文

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

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

セマンティクス
attrspec
属性の識別子とデータ型を指定します。
目的
AND、OR、XORおよびNOTの論理演算子の任意の組合せを使用して1つ以上の条件を指定するには、non_mt_cond_list句を使用します。
non_mt_cond_list句は次のOracle CQL文で使用できます。
詳細は、「条件」を参照してください。
前提条件
なし。
セマンティクス
condition
比較条件を指定します。
詳細は、「比較条件」を参照してください。
構文については、「condition::=」を参照してください。
between_condition
範囲に含まれているかをテストする条件を指定します。
詳細は、「範囲条件」を参照してください。
構文については、「between_condition::=」を参照してください。
目的
このout_of_line_constraint句は、任意のデータ型のタプルを主キー整合性制約で制限するために使用します。
USE UPDATE SEMANTICSのリレーションに対する問合せを構成しようとしている場合は、1つ以上のストリーム要素を主キーとして宣言する必要があります。この制約は、1つ以上のストリーム要素の値で構成される複合主キーを指定するために使用します。
out_of_line_constraint句は、次のOracle CQL文で使用できます。
詳細は、次を参照してください。
前提条件
out_of_line_constraintで指定したタプルには、null値を含めることができません。
構文
out_of_line_constraint::=

セマンティクス
non_mt_attrname_list
主キー整合性制約で制限する1つ以上のタプルを指定します。
目的
関数パラメータ・リストに類似した、Oracle CQLデータ・カートリッジ複合型のメソッドまたはコンストラクタのゼロ個以上のパラメータのカンマ区切りリストを指定するには、param_list句を使用します。
param_list句は次のOracle CQL文で使用できます。
前提条件
なし。
目的
paramspec句は、ストリーム要素の識別子とデータ型を指定するために使用します。複数のストリーム要素の識別子とデータ型を指定するには、multi_paramspec_list句を使用します。
前提条件
なし。
構文
paramspec::=

目的
java.lang.Stringなど、Oracle CQLデータ・カートリッジ複合型の完全指定型名を指定するには、qualified_type_name句を使用します。Oracle CQLデータ・カートリッジの静的フィールド、静的メソッドまたはコンストラクタを呼び出す場合は、qualified_type_nameを使用します。
デフォルト・パッケージはありません。たとえば、クラスStringを参照する場合は、Javaデータ・カートリッジを使用してjava.langを指定する必要があります。予約語と修飾型を区別するには、すべての修飾型に少なくとも2つの識別子が必要であり、修飾名に少なくとも1つのピリオド(.)を使用する必要があります。
前提条件
なし。
セマンティクス
package_name
package_name句を使用して、Oracle CQLデータ・カートリッジ・パッケージ名を指定します。
class_name
class_name句を使用して、Oracle CQLデータ・カートリッジClassの名前を指定します。
目的
日数、時間数、分数、秒数、ミリ秒数またはナノ秒数で期間を定義するにはtime_spec句を使用します。
デフォルト: 単位を指定しない場合、Oracle Event Processingでは[second|seconds]が想定されます。
time_spec句は次のOracle CQL文で使用できます。
「問合せセマンティクス」のwindows_type
前提条件
なし。
構文
図7-10 time_spec::=

図7-11 time_unit::=

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

セマンティクス
xml_attr_list
1つ以上のXML属性を指定します。
<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>
目的
1つ以上のXML属性を指定するには、xml_attr_list句を使用します。
xml_attr_list句は次のOracle CQL文で使用できます。
前提条件
参照しているストリーム要素がある場合は、ストリームが存在している必要があります。
セマンティクス
xml_attr
XML属性を指定します。
目的
XML問合せに1つ以上の引数を指定するには、xqryargs_list句を使用します。
non_mt_arg_list句は次のOracle CQL文で使用できます。
前提条件
参照しているストリーム要素がある場合は、ストリームが存在している必要があります。
セマンティクス
xqryarg
ストリーム要素の値をXQuery変数またはXPath演算子にバインドする句。
1つ以上のストリーム要素を使用する任意の算術式を(arith_expr::=を参照)、指定されたXQueryの変数またはXPath演算子("."など)に引用符付きの文字列としてバインドできます。