単一行関数は、問合せされたストリームまたはビューのすべての行について単一の結果行を返します。
詳細は、1.1.11項「関数」を参照してください。
表9-1は、Oracle CQLに用意されている組込みの単一行関数を示しています。
注意: 組込み関数名では大文字と小文字が区別されるため、表示されている方(小文字)を使用してください。 |
注意: ストリーム入力の例で、h で始まる行(h 3800 など)はハートビート入力タプルです。これは、ハートビート値よりも小さいタイムスタンプを持つこれ以上の入力がないことをOracle CEPに通知します。 |
詳細は、以下を参照してください。
構文
目的
concat
は、char2
に連結されたchar1
をchar[]
として返すか、byte2
に連結されたbyte1
をbyte[]
として返します。返されるchar
は、char1
と同じ文字セット内にあります。そのデータ型は引数のデータ型によって異なります。
concat
を使用すると、任意の組合せの文字、バイトおよび数値データ型を連結できます。concat
では、数値を文字列に自動変換します。
この関数は、連結演算子(||)に相当します。詳細は、「連結演算子」を参照してください。
xmltype
の引数を連結するには、xmlconcat
を使用します。詳細は、「xmlconcat」を参照してください
例
concat関数
例8-1の問合せchr_concat
と例8-2のデータ・ストリームS4
があるとします。ストリームS4
のスキーマは(c1 char(10))
です。例8-3は、問合せで返されるリレーションを示します。
例8-1 concat関数の問合せ
<query id="chr_concat"><![CDATA[ select concat(c1,c1), concat("abc",c1), concat(c1,"abc") from S4[range 5] ]]></query>
例8-3 concat関数のリレーション出力
Timestamp Tuple Kind Tuple 1000: + ,abc,abc 2000: + hihi,abchi,hiabc 6000: - ,abc,abc 7000: - hihi,abchi,hiabc 8000: + hi1hi1,abchi1,hi1abc 9000: + ,abc,abc 13000: - hi1hi1,abchi1,hi1abc 14000: - ,abc,abc 15000: + xyzxyz,abcxyz,xyzabc 20000: - xyzxyz,abcxyz,xyzabc
連結演算子(||)
例8-4の問合せq264
と例8-5のデータ・ストリームS10
があるとします。ストリームS10
のスキーマは(c1 integer, c2 char(10))
です。例8-6は、問合せで返されるリレーションを示します。
構文
目的
hextoraw
は、char
文字セット内の16進数を含むchar
をRAW値に変換します。
例
例8-7の問合せq6
と例8-8のデータ・ストリームSinpByte1
があるとします。ストリームSinpByte1
のスキーマは(c1 byte(10), c2 integer)
です。例8-9は、問合せで返されるリレーションを示します。
例8-7 hextoraw関数の問合せ
<query id="q6"><![CDATA[ select * from SByt[range 2] where bytTest(c2) between hextoraw("5200") and hextoraw("5600") ]]></query>
構文
目的
length
関数は、char
式またはbyte
式の長さをint
として返します。length
では、入力文字セットで定義されている文字を使用して長さを計算します。
char
式の場合は、すべての末尾の空白が長さに含まれます。式がnullの場合、この関数はnullを返します。
例
例8-10の問合せchr_len
と例8-11のデータ・ストリームS2
があるとします。ストリームS2
のスキーマは(c1 integer, c2 integer)
です。例8-12は、問合せで返されるリレーションを示します。
構文
目的
char1
が正規表現char2
に一致する場合、lk
はブール値true
を返します。それ以外の場合は、false
を返します。
この関数は、LIKE
条件に相当します。詳細は、6.4項「LIKE条件」を参照してください。
例
例8-13の問合せq291
と例8-14のデータ・ストリームSLk1
があるとします。ストリームSLk1
のスキーマは(first1 char(20), last1 char(20))
です。例8-15は、問合せで返されるリレーションを示します。
例8-13 lk関数の問合せ
<query id="q291"><![CDATA[ select * from SLk1 where lk(first1,"^Ste(v|ph)en$") ]]></query>
構文
目的
nvl
を使用すると、空白として返されるnullを問合せの結果内の文字列に置き換えることができます。expr1
がnullの場合、NVL
はexpr2
を返します。expr1
がnullでない場合、NVL
はexpr1
を返します。
引数expr1
とexpr2
は任意のデータ型にすることができます。この2つのデータ型が異なる場合、Oracle CEPでは一方の型をもう一方にあわせるように暗黙的に変換します。暗黙的な変換を行うことができない場合、Oracle CEPはエラーを返します。この暗黙的な変換は次のように実装されます。
expr1
が文字データの場合、Oracle CEPではexpr2
を文字データに変換してから比較を行い、expr1
の文字セット内のVARCHAR2
を返します。
expr1
が数値の場合、Oracle CEPでは数値の優先順位が最も高い引数を判断し、他の引数をそのデータ型に暗黙的に変換して、そのデータ型を返します。
例
例8-16の問合せq281
と例8-17のデータ・ストリームSNVL
があるとします。ストリームSNVL
のスキーマは(c1 char(20), c2 integer)
です。例8-18は、問合せで返されるリレーションを示します。
構文
目的
prev
は、現在のイベントが属するパーティション内にある、現在のイベントの前に発生したイベントのストリーム属性(関数の引数identifier2
)の値を返します。該当する前のイベントがない場合は、NULL
と評価されます。
指定されるストリーム要素の型は、次のいずれかになります。
integer
bigint
float
double
byte
char
interval
timestamp
この関数の戻り値の型は、指定されたストリーム属性の型によって異なります(関数の引数identifier2
)。
この関数は次の引数を使用します。
説明:
identifier1.identifier2
: identifier1
はPATTERN
句で使用されDEFINE
句で定義される相関変数の名前で、identifier2
はprev
によって前のイベントの値が返されるストリーム属性の名前です。
const_int1
: この引数の値がnの場合、現在のイベントが属するパーティション内のn個前のイベントを指定します。このようなイベントが存在する場合、n個前のイベントの属性値(引数identifier2
で指定された)が返され、それ以外の場合はNULL
が返されます。
const_int2
: 時間範囲をナノ秒で指定し、現在のイベントより特定の時間範囲以内に発生した前のイベントのみを探す場合に使用します。
例
prev(identifier1.identifier2)
例8-19の問合せq2
と例8-20のデータ・ストリームS1
があるとします。ストリームS1
のスキーマは(c1 integer)
です。この例では、パターンA
をA.c1 = prev(A.c1)
と定義します。つまり、現在のストリーム要素のc1
の値が現在のストリーム要素の直前にあるストリーム要素のc1
の値と一致する場合に、パターンA
が一致します。この問合せは、例8-21に示すリレーションを返します。
例8-19 prev(identifier1.identifier2)関数の問合せ
<query id="q2"><![CDATA[ select T.Ac1, T.Cc1 from S1 MATCH_RECOGNIZE ( MEASURES A.c1 as Ac1, C.c1 as Cc1 PATTERN(A B+ C) DEFINE A as A.c1 = prev(A.c1), B as B.c1 = 10, C as C.c1 = 7 ) as T ]]></query>
prev(identifier1.identifier2, const_int1)
例8-22の問合せq35
と例8-23のデータ・ストリームS15
があるとします。ストリームS15
のスキーマは(c1 integer, c2 integer)
です。この例では、パターンA
をA.c1 = prev(A.c1,3)
と定義します。つまり、現在のストリーム要素のc1
の値が現在のストリーム要素の3つ前にあるストリーム要素のc1
の値と一致する場合に、パターンA
が一致します。この問合せは、例8-24に示すリレーションを返します。
例8-22 prev(identifier1.identifier2, const_int1)関数の問合せ
<query id="q35"><![CDATA[ select T.Ac1 from S15 MATCH_RECOGNIZE ( MEASURES A.c1 as Ac1 PATTERN(A) DEFINE A as (A.c1 = prev(A.c1,3) ) ) as T ]]></query>
例8-23 prev(identifier1.identifier2, const_int1)関数のストリーム入力
Timestamp Tuple 1000 45,20 2000 45,30 3000 45,30 4000 45,30 5000 45,30 6000 45,20 7000 45,20 8000 45,20 9000 43,40 10000 52,10 11000 52,30 12000 43,40 13000 52,50 14000 43,40 15000 43,40
例8-24 prev(identifier1.identifier2, const_int1)関数のリレーション出力
Timestamp Tuple Kind Tuple 3000: + 45 4000: + 45 5000: + 45 6000: + 45 7000: + 45 8000: + 45 13000: + 52 15000: + 43
prev(identifier1.identifier2, const_int1, const_int2)
例8-26の問合せq36
と例8-27のデータ・ストリームS15
があるとします。ストリームS15
のスキーマは(c1 integer, c2 integer)
です。この例では、パターンA
をA.c1 = prev(A.c1,3,5000000000L)
と定義します。つまり、次の場合にパターンA
が一致します。
現在のイベントのc1
の値が、現在のイベントが属するパーティション内の3つ前のイベントのc1
の値と一致する場合、および
現在のイベントのタイムスタンプと3つ前のイベントのタイムスタンプの差が、5000000000L
ナノ秒以下である場合。
この問合せは、例8-28に示す出力リレーションを返します。出力リレーションには、8000
での出力はありません。例8-25は、8000
でのイベントが属するパーティション(c2
属性の値でパーティション化された)のコンテンツを示しています。
例8-25に示すように、3つ前のイベント(1000
でのイベント)のc1
の値が現在のイベント(8000
でのイベント)のc1
の値と等しくても、範囲条件は満たされません。これら2つのイベントのタイムスタンプの差が5000000000
ナノ秒を超えているためです。前のタプルは存在しないものとして処理され、prev
はNULL
を返すため、条件は一致しません。
例8-26 prev(identifier1.identifier2, const_int1, const_int2)関数の問合せ
<query id="q36"><![CDATA[ select T.Ac1 from S15 MATCH_RECOGNIZE ( PARTITION BY c2 MEASURES A.c1 as Ac1 PATTERN(A) DEFINE A as (A.c1 = prev(A.c1,3,5000000000L) ) ) as T ]]></query>
構文
目的
rawtohex
は、RAW値を含むbyte
をchar
文字セット内の16進数に変換します。
例
例8-29の問合せbyte_to_hex
と例8-30のデータ・ストリームS5
があるとします。ストリームS5
のスキーマは(c1 integer, c2 byte(10))
です。この問合せでは、rawtohex
関数を使用して、10バイトのRAW値を、現在のロケールの文字セット内にある同等の10個の16進数に変換します。この問合せは、例8-31に示すリレーションを返します。
例8-29 rawtohex関数の問合せ
<query id="byte_to_hex"><![CDATA[ select rawtohex(c2) from S5[range 4] ]]></query>
構文
目的
systimestamp
は、Oracle CEPサーバーが存在するシステムのシステム日付(小数で表す秒数とタイム・ゾーンを含む)を返します。戻り値の型は、TIMESTAMP
WITH
TIME
ZONE
です。
例
例8-32の問合せq106
と例8-33のデータ・ストリームS0
があるとします。ストリームS0
のスキーマは(c1 float, c2 integer)
です。この問合せは、例8-34に示すリレーションを返します。case
の詳細は、「case_expr」を参照してください。
例8-32 systimestamp関数の問合せ
<query id="q106"><![CDATA[ select * from S0 where case c2 when 10 then null when 20 then null else systimestamp() end > "07/06/2007 14:13:33" ]]></query>
構文
目的
to_bigint
は、integer
の引数と同等のbigint
の数値を返します。
詳細は、以下を参照してください。
例
例8-35の問合せq282
と例8-36のデータ・ストリームS11
があるとします。ストリームS11
のスキーマは(c1 integer, name char(10))
です。例8-37は、問合せで返されるリレーションを示します。
構文
目的
to_boolean
は、bigint
式またはinteger
式の引数に対して値true
またはfalse
を返します。
詳細は、以下を参照してください。
例
例8-35の問合せq282
と例8-36のデータ・ストリームS11
があるとします。ストリームS11
のスキーマは(c1 integer, name char(10))
です。例8-37は、問合せで返されるリレーションを示します。
例8-38 to_boolean関数の問合せ
<view id="v2" schema="c1 c2" ><![CDATA[ select to_boolean(c1), c1 from tkboolean_S3 [now] where c2 = 0.1 ]]></view><query id="q1"><![CDATA[ select * from v2 ]]></query>
構文
目的
to_char
は、integer
、double
、bigint
、float
、timestamp
またはinterval
式の引数に対してchar
の値を返します。bigint
の引数がchar
の精度を超える場合、Oracle CEPはエラーを返します。
詳細は、以下を参照してください。
例
例8-35の問合せq282
と例8-36のデータ・ストリームS11
があるとします。ストリームS11
のスキーマは(c1 integer, name char(10))
です。例8-37は、問合せで返されるリレーションを示します。
例8-41 to_char関数の問合せ
<query id="q1"><![CDATA[ select to_char(c1), to_char(c2), to_char(c3), to_char(c4), to_char(c5), to_char(c6) from S1 ]]></query>
構文
目的
to_double
は、bigint
、integer
またはfloat
式の引数に対してdouble
の値を返します。bigint
の引数がdouble
の精度を超える場合、Oracle CEPはエラーを返します。
詳細は、以下を参照してください。
例
例8-35の問合せq282
と例8-36のデータ・ストリームS11
があるとします。ストリームS11
のスキーマは(c1 integer, name char(10))
です。例8-37は、問合せで返されるリレーションを示します。
構文
目的
to_float
は、bigint
またはinteger
の引数と同等のfloat
の数値を返します。bigint
の引数がfloat
の精度を超える場合、Oracle CEPはエラーを返します。
詳細は、以下を参照してください。
例
例8-47の問合せq1
と例8-48のデータ・ストリームS11
があるとします。ストリームS1
のスキーマは(c1 integer, name char(10))
です。例8-49は、問合せで返されるリレーションを示します。
構文
目的
to_timestamp
は、java.text.SimpleDateFormat
の書式モデルに準拠しているchar
リテラルをtimestamp
データ型に変換します。to_timestamp
関数には次の2つの形式があり、引数の数で区別されます。
char
: この形式のto_timestamp
関数では、デフォルトのjava.text.SimpleDateFormat
の書式モデル(MM/dd/yyyy HH:mm:ss
)に準拠しているchar
リテラルを含む1つのchar
の引数を、対応するtimestamp
データ型に変換します。
char1, char2
: この形式のto_timestamp
関数では、2番目のchar2
の引数で指定された java.text.SimpleDateFormat
の書式モデルに準拠しているchar
リテラルを含むchar1
の引数を、対応するtimestamp
データ型に変換します。
long
: この形式のto_timestamp
関数では、January 1, 1970, 00:00:00 GMTなど、"Epoch"(エポック)と呼ばれる標準の基本時間以降のナノ秒を示す1つのlong
引数を、デフォルトのjava.text.SimpleDateFormat
の書式モデル(MM/dd/yyyy HH:mm:ss
)に準拠している日付書式で、対応するtimestamp
データ型に変換します。
詳細は、以下を参照してください。
例
例8-50の問合せq277
と例8-51のデータ・ストリームSTs2
があるとします。ストリームSTs2
のスキーマは(c1 integer, c2 char(20))
です。例8-52は、問合せで返されるリレーションを示します。
例8-50 to_timestamp関数の問合せ
<query id="q277"><![CDATA[ select * from STs2 where to_timestamp(c2,"yyMMddHHmmss") = to_timestamp("09/07/2005 10:13:48") ]]></query>
構文
目的
xmlcomment
は、二重引用符で区切られた定数String
の引数をxmltype
として返します。
xmlcomment
を使用すると、整形式のXMLコメントを問合せ結果に追加できます。
この関数は次の引数を使用します。
quoted_string_double_quotes
: 二重引用符で区切られたString
定数。
この関数の戻り値の型はxmltype
です。正確なスキーマはXMLデータの入力ストリームのスキーマによって異なります。
例
例8-53の問合せtkdata64_q1
と例8-54のデータ・ストリームtkdata64_S
があるとします。ストリームtkdata64_S
のスキーマは(c1 char(30))
です。例8-55は、問合せで返されるリレーションを示します。
例8-53 xmlcomment関数の問合せ
<query id="tkdata64_q1"><![CDATA[ xmlconcat(xmlelement("parent", c1), xmlcomment("this is a comment")) from tkdata64_S ]]></query>
例8-54 xmlcomment関数のストリーム入力
Timestamp Tuple c 30 1000 "san jose" 1000 "mountain view" 1000 1000 "sunnyvale" 1003 1004 "belmont"
例8-55 xmlcomment関数のリレーション出力
Timestamp Tuple Kind Tuple 1000: + <parent>san jose</parent> <!--this is a comment--> 1000: + <parent>mountain view</parent> <!--this is a comment--> 1000: + <parent/> <!--this is a comment--> 1000: + <parent>sunnyvale</parent> <!--this is a comment--> 1003: + <parent/> <!--this is a comment--> 1004: + <parent>belmont</parent> <!--this is a comment-->
構文
目的
xmlconcat
は、カンマで区切られたxmltype
の引数の連結をxmltype
として返します。
xmlconcat
を使用すると、任意の組合せのxmltype
の引数を連結できます。
この関数は次の引数を使用します。
non_mt_arg_list
: カンマで区切られたxmltype
の引数のリスト。詳細は、non_mt_arg_list::=を参照してください。
この関数の戻り値の型はxmltype
です。正確なスキーマはXMLデータの入力ストリームのスキーマによって異なります。
この関数は、SQLXのストリームを処理する場合に特に役立ちます。詳細は、「SQL/XML (SQLX)」を参照してください
xmltype
以外のデータ型を連結するには、CONCAT
を使用します。詳細は、「concat」を参照してください。
例
例8-53の問合せtkdata64_q1
と例8-54のデータ・ストリームtkdata64_S
があるとします。ストリームtkdata64_S
のスキーマは(c1 char(30))
です。例8-55は、問合せで返されるリレーションを示します。
例8-56 xmlconcat関数の問合せ
<query id="tkdata64_q1"><![CDATA[ select xmlconcat(xmlelement("parent", c1), xmlcomment("this is a comment")) from tkdata64_S ]]></query>
例8-57 xmlconcat関数のストリーム入力
Timestamp Tuple c 30 1000 "san jose" 1000 "mountain view" 1000 1000 "sunnyvale" 1003 1004 "belmont"
例8-58 xmlconcat関数のリレーション出力
Timestamp Tuple Kind Tuple 1000: + <parent>san jose</parent> <!--this is a comment--> 1000: + <parent>mountain view</parent> <!--this is a comment--> 1000: + <parent/> <!--this is a comment--> 1000: + <parent>sunnyvale</parent> <!--this is a comment--> 1003: + <parent/> <!--this is a comment--> 1004: + <parent>belmont</parent> <!--this is a comment-->
構文
目的
xmlexists
は、XMLデータのストリームに対する連続した問合せを作成します。この問合せでは、指定したXQueryをXMLデータが満たすかどうかを示すboolean
を返します。
この関数は次の引数を使用します。
const_string
: xqryargs_list
でバインドするXMLストリーム要素のデータにOracle CEPが適用するXQuery。詳細は、const_string::=を参照してください。
xqryargs_list
: ストリーム要素とXQuery変数またはXPath演算子との間の1つまたは複数のバインディングのリスト。詳細は、xqryargs_list::=を参照してください。
この関数の戻り値の型はboolean
です。XQueryを満たす場合はtrue
、それ以外の場合はfalse
です。
この関数は、SQLXのストリームを処理する場合に特に役立ちます。詳細は、「SQL/XML (SQLX)」を参照してください
例
例8-59の問合せq1
と例8-60のXMLデータ・ストリームS
があるとします。ストリームS
のスキーマは(c1 integer, c2 xmltype)
です。この例では、ストリーム要素c2
の値が現在のノード("."
)にバインドされ、ストリーム要素c1 + 1
の値がXQuery変数x
にバインドされます。この問合せは、例8-61に示すリレーションを返します。
例8-59 xmlexists関数の問合せ
<query id="q1"><![CDATA[ SELECT xmlexists( "for $i in /PDRecord WHERE $i/PDId <= $x RETURN $i/PDName" PASSING BY VALUE c2 as ".", (c1+1) AS "x" RETURNING CONTENT ) XMLData FROM S ]]></query>
構文
目的
xmlquery
は、XMLデータのストリームに対する連続した問合せを作成します。この問合せでは、指定したXQueryを満たすXMLデータを返します。
この関数は次の引数を使用します。
const_string
: xqryargs_list
でバインドするXMLストリーム要素のデータにOracle CEPが適用するXQuery。詳細は、const_string::=を参照してください。
xqryargs_list
: ストリーム要素とXQuery変数またはXPath演算子との間の1つまたは複数のバインディングのリスト。詳細は、xqryargs_list::=を参照してください。
この関数の戻り値の型はxmltype
です。正確なスキーマはXMLデータの入力ストリームのスキーマによって異なります。
この関数は、SQLXのストリームを処理する場合に特に役立ちます。詳細は、「SQL/XML (SQLX)」を参照してください
例
例8-62の問合せq1
と例8-63のXMLデータ・ストリームS
があるとします。ストリームS
のスキーマは(c1 integer, c2 xmltype)
です。この例では、ストリーム要素c2の値が現在のノード("."
)にバインドされ、ストリーム要素c1 + 1
の値がXQuery変数x
にバインドされます。この問合せは、例8-64に示すリレーションを返します。
例8-62 xmlquery関数の問合せ
<query id="q1"><![CDATA[ SELECT xmlquery( "for $i in /PDRecord WHERE $i/PDId <= $x RETURN $i/PDName" PASSING BY VALUE c2 as ".", (c1+1) AS "x" RETURNING CONTENT ) XMLData FROM S ]]></query>