この章では、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 Stream Analyticsでは、この複合型がJavaクラスであると想定されます(つまり、この複合型がJavaデータ・カートリッジに属するとOracle Stream Analyticsで見なされます)。
前提条件
complextypeを提供するOracle CQLデータ・カートリッジが、実行時にOracle Stream Analyticsサーバーによってロードされている必要があります。
セマンティクス
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
。
目的
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文で使用できます。
前提条件
なし。
目的
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 Stream Analyticsでは[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演算子("."
など)に引用符付きの文字列としてバインドできます。