この章では、Oracle Continuous Query Language (Oracle CQL)のデータ定義言語(DDL)に含まれる句のリファレンスを提供します。
この章の内容は次のとおりです。
Oracle CQLでは次の共通のDDL句をサポートしています。
Oracle CQL文の詳細は、第22章「Oracle CQL文」を参照してください。
目的
すべて同じ型の一連のcomplex_typeコンポーネントで構成されるOracle CQLデータ・カートリッジの型を指定するには、array_type
句を使用します。
注意: Oracle CQLでは1次元配列のみをサポートしています。このため、java.lang.String[] は使用できますが、java.lang.String[][] は使用できません。 |
セマンティクス
配列宣言
配列型は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; 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
で定義されます。
セマンティクス
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>
セマンティクス
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 Event Processingでは複合型がJavaクラスであると見なします(複合型がJavaデータ・カートリッジに所属すると見なします)。
構文
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項「数値リテラル」を参照してください。
目的
定数のStringテキスト・リテラルを指定するには、
const_string句を使用します。
const_string
句は次のOracle CQL文で使用できます。
詳細は、2.3.1項「テキスト・リテラル」を参照してください。
セマンティクス
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項「数値リテラル」を参照してください。
セマンティクス
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
。
目的
1つ以上の引数をストリーム要素を使用する算術式として指定するには、non_mt_arg_list
句を使用します。1つ以上の引数をストリーム要素として直接指定するには、non_mt_attr_list::=を参照してください。
non_mt_arg_list
句は次のOracle CQL文で使用できます。
目的
1つ以上の引数をストリーム要素として直接指定するには、non_mt_attr_list
句を使用します。1つ以上の引数を、ストリーム要素を使用する算術式として指定するには、non_mt_arg_list::=を参照してください。
non_mt_attr_list
句は次のOracle CQL文で使用できます。
目的
AND、OR
、XOR
およびNOT
の論理演算子の任意の組合せを使用して1つ以上の条件を指定するには、non_mt_cond_list
句を使用します。
non_mt_cond_list
句は次のOracle CQL文で使用できます。
詳細は、第6章「条件」を参照してください。
セマンティクス
condition
比較条件を指定します。
詳細は、6.2項「比較条件」を参照してください。
構文については、condition::=(親: non_mt_cond_list::=)を参照してください。
between_condition
範囲に含まれているかをテストする条件を指定します。
詳細は、6.5項「範囲条件」を参照してください。
構文については、between_condition::=(親: non_mt_cond_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::=)
セマンティクス
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::=)を参照してください。
セマンティクス
xqryarg
ストリーム要素の値をXQuery変数またはXPath演算子にバインドする句。
1つ以上のストリーム要素を使用する任意の算術式を(arith_expr::=を参照)、指定されたXQueryの変数またはXPath演算子("."
など)に引用符付きの文字列としてバインドできます。
構文については、xqryarg::=(親: xqryargs_list::=)を参照してください。