この章では、複数のOracle CQL文で使用するOracle CQLデータ定義言語(DDL)の句について説明します。
Oracle CQLでは次の共通のDDL句をサポートしています。
Oracle CQL文の詳細は、第20章「Oracle CQL文」を参照してください。
目的
すべて同じ型の一連のcomplex_type
コンポーネントで構成されるOracle CQLデータ・カートリッジの型を指定するには、array_type
句を使用します。
注意: Oracle CQLでは1次元配列のみをサポートしています。このため、java.lang.String[] は使用できますが、java.lang.String[][] は使用できません。 |
要件
なし。
構文
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
fiel_dname
句を使用して、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.4.2項「数値リテラル」を参照してください。
要件
なし。
構文
目的
整数の数値リテラルを指定するには、const_int
句を使用します。
const_int
句は次のOracle CQL文で使用できます。
詳細は、2.4.2項「数値リテラル」を参照してください。
要件
なし。
構文
目的
定数のString
テキスト・リテラルを指定するには、const_string
句を使用します。
const_string
句は次のOracle CQL文で使用できます。
詳細は、2.4.1項「テキスト・リテラル」を参照してください。
要件
なし。
構文
目的
リテラル値を指定するには、const_value
句を使用します。
const_value
句は次のOracle CQL文で使用できます。
詳細は、2.4項「リテラル」を参照してください。
要件
なし。
構文
(interval_value::=、const_string::=、const_int::=、const_bigint::=)
セマンティクス
interval_value
期間の定数値を引用符付きの文字列として指定します。例:
INTERVAL '4 5:12:10.222' DAY TO SECOND(3)
詳細は、2.4.4項「期間リテラル」を参照してください。
構文については、interval_value::=(親: const_value::=)を参照してください。
const_string
引用符付きのString
定数値を指定します。
詳細は、2.4.1項「テキスト・リテラル」を参照してください。
構文については、const_string::=(親: interval_value::=およびconst_value::=)を参照してください。
null
null定数値を指定します。
詳細は、2.6項「Null」を参照してください。
const_int
int
定数値を指定します。
詳細は、2.4.2項「数値リテラル」を参照してください。
bigint
bigint
定数値を指定します。
詳細は、2.4.2項「数値リテラル」を参照してください。
float
float定数値を指定します。
詳細は、2.4.2項「数値リテラル」を参照してください。
目的
既存のOracle CQLスキーマ オブジェクトを参照するには、identifier
句を使用します。
identifier
句は次のOracle CQL文で使用できます。
要件
スキーマ・オブジェクトが存在している必要があります。
構文
(const_string::=、unreserved_keyword::=)
セマンティクス
const_string
識別子をStringとして指定します。
詳細は、2.9.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::=)を参照してください。