単一行関数は、照会されるストリームまたはビューのすべての行について単一の結果行を返します。
詳細については、節 1.1.9「関数」を参照してください。
表 5-1 は、Oracle CQL に用意されている組み込みの単一行関数を示しています。
注意 : ストリーム入力の例で、h で始まる行 (h 3800 など) はハートビート入力タプルです。これは、ハートビート値よりも小さいタイムスタンプを持つこれ以上の入力がないことを Oracle CEP に通知します。 |
詳細については、以下を参照してください。
構文
目的
CONCAT
は、char2
に連結された char1
を char[]
として返すか、byte2
に連結された byte1
を byte[]
として返します。返される char
は、char1
と同じ文字セット内にあります。そのデータ型は引数のデータ型によって異なります。
CONCAT
を使用すると、任意の組み合わせの文字、バイト、および数値データ型を連結できます。CONCAT
では、数値を文字列に自動変換します。
この関数は、連結演算子 (||) に相当します。詳細については、「連結演算子」を参照してください。
xmltype
の引数を連結するには、XMLCONCAT
を使用します。詳細については、「XMLCONCAT」を参照してください。
例
CONCAT 関数
例 5-1 のクエリ chr_concat
と 例 5-2 のデータ ストリーム S4
があるとします。ストリーム S4
にはスキーマ (c1 char(10))
があります。このクエリは、例 5-3 に示すリレーションを返します。
例 5-1 CONCAT 関数のクエリ
<query id="chr_concat"><![CDATA[ select concat(c1,c1), concat("abc",c1), concat(c1,"abc") from S4[range 5] ]]></query>
例 5-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
連結演算子 (||)
例 5-4 のクエリ q264
と 例 5-5 のデータ ストリーム S10
があるとします。ストリーム S10
にはスキーマ (c1 integer, c2 char(10))
があります。このクエリは、例 5-6 に示すリレーションを返します。
構文
目的
HEXTORAW
は、CHAR
文字セット内の 16 進数を含む char
を未加工値に変換します。
例
例 5-7 のクエリ q6
と 例 5-8 のデータ ストリーム SinpByte1
があるとします。ストリーム SinpByte1
にはスキーマ (c1 byte(10), c2 integer)
があります。このクエリは、例 5-9 に示すリレーションを返します。
例 5-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 を返します。
例
例 5-10 のクエリ chr_len
と 例 5-11 のデータ ストリーム S2
があるとします。ストリーム S2
のスキーマは (c1 integer, c2 integer)
です。このクエリは、例 5-12 に示すリレーションを返します。
構文
目的
char1
が正規表現 char2
に一致する場合、LK
はブール値 true
を返します。それ以外の場合は、false
を返します。
この関数は、LIKE
条件に相当します。詳細については、節 12.4「LIKE 条件」を参照してください。
例
例 5-13 のクエリ q291
と 例 5-14 のデータ ストリーム SLk1
があるとします。ストリーム SLk1
にはスキーマ (first1 char(20), last1 char(20))
があります。このクエリは、例 5-15 に示すリレーションを返します。
例 5-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 では数値の優先順位が最も高い引数を判断し、他の引数をそのデータ型に暗黙的に変換して、そのデータ型を返します。
例
例 5-16 のクエリ q281
と 例 5-17 のデータ ストリーム SNVL
があるとします。ストリーム SNVL
にはスキーマ (c1 char(20), c2 integer)
があります。このクエリは、例 5-18 に示すリレーションを返します。
構文
目的
PREV
は、指定されたパターンに一致する前の指定されたストリーム要素の値を返します。
指定されるストリーム要素の型は、次のいずれかになります。
bigint
integer
byte
char
float
interval
timestamp
この関数の戻り値の型は、指定されたストリーム要素の型によって異なります。
この関数は次の引数を使用します。
各項目は次のとおりです。
identifier1
: DEFINE
句で指定されたパターンの名前。
identifier2
: CREATE STREAM
文で指定されたストリーム要素の名前。
const_int1
: 比較対象である現在のストリーム要素の前のストリーム要素のインデックス。デフォルト : 1。
const_int2
: 比較対象である現在のストリーム要素の前のストリーム要素のタイムスタンプ。ストリーム要素のタイムスタンプを取得するには、ELEMENT_TIME
擬似列を使用できます (節 3.2「ELEMENT_TIME 擬似列」を参照)。
例
PREV(identifier1.identifier2)
例 5-19 のクエリ q2
と 例 5-20 のデータ ストリーム S1
があるとします。ストリーム S1
にはスキーマ (c1 integer)
があります。この例では、パターン A
を A.c1 = prev(A.c1)
と定義します。つまり、現在のストリーム要素の c1
の値が現在のストリーム要素の直前にあるストリーム要素の c1
の値と一致する場合に、パターン A
が一致します。このクエリは、例 5-21 に示すリレーションを返します。
例 5-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)
例 5-22 のクエリ q35
と 例 5-23 のデータ ストリーム S15
があるとします。ストリーム S15
にはスキーマ (c1 integer, c2 integer)
があります。この例では、パターン A
を A.c1 = PREV(A.c1,3)
と定義します。つまり、現在のストリーム要素の c1
の値が現在のストリーム要素の 3 つ前にあるストリーム要素の c1
の値と一致する場合に、パターン A
が一致します。このクエリは、例 5-24 に示すリレーションを返します。
例 5-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>
例 5-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
例 5-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)
例 5-25 のクエリ q36
と 例 5-23 のデータ ストリーム S15
があるとします。ストリーム S15
にはスキーマ (c1 integer, c2 integer)
があります。この例では、パターン A
を A.c1 = PREV(A.c1,3,5000)
と定義します。つまり、現在のストリーム要素の c1
の値が現在のストリーム要素の 3 つ前にある (タイムスタンプが 5000
の) ストリーム要素の c1
の値と一致する場合に、パターン A
が一致します。このクエリは、例 5-24 に示すリレーションを返します。
例 5-25 は、PREV
関数を使用して、前にある (特定のタイムスタンプを持つ) 特定のストリーム要素に対する比較を行う方法を示しています。
例 5-25 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,5000) ) ) as T ]]></query>
構文
目的
RAWTOHEX
は、未加工値を含む byte
を CHAR
文字セット内の 16 進数に変換します。
例
例 5-28 のクエリ byte_to_hex
と 例 5-29 のデータ ストリーム S5
があるとします。ストリーム S5
にはスキーマ (c1 integer, c2 byte(10))
があります。このクエリでは、RAWTOHEX
関数を使用して、10 バイトの未加工値を、現在のロケールの文字セット内にある同等の 10 個の 16 進数に変換します。このクエリは、例 5-30 に示すリレーションを返します。
例 5-28 RAWTOHEX 関数のクエリ
<query id="byte_to_hex"><![CDATA[ select rawtohex(c2) from S5[range 4] ]]></query>
構文
目的
SYSTIMESTAMP
は、Oracle CEP サーバが存在するシステムのシステム日付 (小数で表す秒数とタイム ゾーンを含む) を返します。戻り値の型は、TIMESTAMP
WITH
TIME
ZONE
です。
例
例 5-31 のクエリ q106
と 例 5-32 のデータ ストリーム S0
があるとします。ストリーム S0
にはスキーマ (c1 float, c2 integer)
があります。このクエリは、例 5-33 に示すリレーションを返します。case
の詳細については、「case_expr」を参照してください。
例 5-31 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
の数値を返します。
詳細については、以下を参照してください。
例
例 5-34 のクエリ q282
と 例 5-35 のデータ ストリーム S11
があるとします。ストリーム S11
にはスキーマ (c1 integer, name char(10))
があります。このクエリは、例 5-36 に示すリレーションを返します。
構文
目的
TO_BOOLEAN
は、bigint
式または integer
式の引数に対して値 true
または false
を返します。
詳細については、以下を参照してください。
例
例 5-34 のクエリ q282
と 例 5-35 のデータ ストリーム S11
があるとします。ストリーム S11
にはスキーマ (c1 integer, name char(10))
があります。このクエリは、例 5-36 に示すリレーションを返します。
例 5-37 TO_BOOLEAN 関数のクエリ
<view id="v2" schema="c1 boolean, c2 bigint" ><![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 はエラーを返します。
詳細については、以下を参照してください。
例
例 5-34 のクエリ q282
と 例 5-35 のデータ ストリーム S11
があるとします。ストリーム S11
にはスキーマ (c1 integer, name char(10))
があります。このクエリは、例 5-36 に示すリレーションを返します。
例 5-40 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 はエラーを返します。
詳細については、以下を参照してください。
例
例 5-34 のクエリ q282
と 例 5-35 のデータ ストリーム S11
があるとします。ストリーム S11
にはスキーマ (c1 integer, name char(10))
があります。このクエリは、例 5-36 に示すリレーションを返します。
構文
目的
TO_FLOAT
は、bigint
または integer
の引数と同等の float
の数値を返します。bigint
の引数が float
の精度を超える場合、Oracle CEP はエラーを返します。
詳細については、以下を参照してください。
例
例 5-46 のクエリ q1
と 例 5-47 のデータ ストリーム S11
があるとします。ストリーム S1
にはスキーマ (c1 integer, name char(10))
があります。このクエリは、例 5-48 に示すリレーションを返します。
構文
目的
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
データ型に変換します。
詳細については、以下を参照してください。
例
例 5-49 のクエリ q277
と 例 5-50 のデータ ストリーム STs2
があるとします。ストリーム STs2
にはスキーマ (c1 integer, c2 char(20))
があります。このクエリは、例 5-51 に示すリレーションを返します。
例 5-49 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 データの入力ストリームのスキーマによって異なります。
例
例 5-52 のクエリ tkdata64_q1
と 例 5-53 のデータ ストリーム tkdata64_S
があるとします。ストリーム tkdata64_S
にはスキーマ (c1 char(30))
があります。このクエリは、例 5-54 に示すリレーションを返します。
例 5-52 XMLCOMMENT 関数のクエリ
<query id="tkdata64_q1"><![CDATA[ xmlconcat(xmlelement("parent", c1), xmlcomment("this is a comment")) from tkdata64_S ]]></query>
例 5-53 XMLCOMMENT 関数のストリーム入力
Timestamp Tuple c 30 1000 "san jose" 1000 "mountain view" 1000 1000 "sunnyvale" 1003 1004 "belmont"
例 5-54 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」を参照してください。
例
例 5-52 のクエリ tkdata64_q1
と 例 5-53 のデータ ストリーム tkdata64_S
があるとします。ストリーム tkdata64_S
にはスキーマ (c1 char(30))
があります。このクエリは、例 5-54 に示すリレーションを返します。
例 5-55 XMLCONCAT 関数のクエリ
<query id="tkdata64_q1"><![CDATA[ select xmlconcat(xmlelement("parent", c1), xmlcomment("this is a comment")) from tkdata64_S ]]></query>
例 5-56 XMLCONCAT 関数のストリーム入力
Timestamp Tuple c 30 1000 "san jose" 1000 "mountain view" 1000 1000 "sunnyvale" 1003 1004 "belmont"
例 5-57 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)」を参照してください。
例
例 5-58 のクエリ q1
と 例 5-59 の XML データ ストリーム S
があるとします。ストリーム S
にはスキーマ (c1 integer, c2 xmltype)
があります。この例では、ストリーム要素 c2
の値が現在のノード ("."
) にバインドされ、ストリーム要素 c1 + 1
の値が XQuery 変数 x
にバインドされます。このクエリは、例 5-60 に示すリレーションを返します。
例 5-58 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>
例 5-59 XMLEXISTS 関数のストリーム入力
Timestamp Tuple 3 1, "<PDRecord><PDName>hello</PDName></PDRecord>" 4 2, "<PDRecord><PDName>hello</PDName><PDName>hello1</PDName></PDRecord>" 5 3, "<PDRecord><PDId>6</PDId><PDName>hello1</PDName></PDRecord>" 6 4, "<PDRecord><PDId>46</PDId><PDName>hello2</PDName></PDRecord>"
構文
目的
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)」を参照してください。
例
例 5-61 のクエリ q1
と 例 5-62 の XML データ ストリーム S
があるとします。ストリーム S
にはスキーマ (c1 integer, c2 xmltype)
があります。この例では、ストリーム要素 c2 の値が現在のノード ("."
) にバインドされ、ストリーム要素 c1 + 1
の値が XQuery 変数 x
にバインドされます。このクエリは、例 5-63 に示すリレーションを返します。
例 5-61 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>
例 5-62 XMLQUERY 関数のストリーム入力
Timestamp Tuple 3 1, "<PDRecord><PDName>hello</PDName></PDRecord>" 4 2, "<PDRecord><PDName>hello</PDName><PDName>hello1</PDName></PDRecord>" 5 3, "<PDRecord><PDId>6</PDId><PDName>hello1</PDName></PDRecord>" 6 4, "<PDRecord><PDId>46</PDId><PDName>hello2</PDName></PDRecord>"