| Oracle® Fusion Middleware Oracle Complex Event Processing CQL言語リファレンス 11gリリース1 (11.1.1.6.2) B61613-04 | 
 | 
|  前 |  次 | 
この章では、Oracle Continuous Query Language (Oracle CQL)の単一行関数のリファレンスを提供します。単一行関数は、問い合せたストリームまたはビューのすべての行について単一行の結果を返します。
詳細は、1.1.11項「関数」を参照してください。
表8-1は、Oracle CQLに用意されている組込みの単一行関数を示しています。
| 注意: 組込み関数名では大文字と小文字が区別されるため、表示されている方(小文字)を使用してください。 | 
| 注意: ストリーム入力の例で、 | 
詳細は、以下を参照してください。
構文

目的
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)に準拠している日付書式で、"Epoch"(エポック)以降のミリ秒として表現される対応する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>