ヘッダーをスキップ
Oracle® Complex Event Processing CQL言語リファレンス
11g リリース1(11.1.1.4.0)
B61613-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

8 組込みの単一行関数

単一行関数は、問合せされたストリームまたはビューのすべての行について単一の結果行を返します。

詳細は、1.1.11項「関数」を参照してください。

8.1 Oracle CQLの組込みの単一行関数の概要

表9-1は、Oracle CQLに用意されている組込みの単一行関数を示しています。

表8-1 Oracle CQLの組込みの単一行関数

関数

文字(文字値を返す)


文字(数値を返す)


日時


変換


XMLとSQLX


エンコードとデコード


Null関連


パターン一致




注意:

組込み関数名では大文字と小文字が区別されるため、表示されている方(小文字)を使用してください。


注意:

ストリーム入力の例で、hで始まる行(h 3800など)はハートビート入力タプルです。これは、ハートビート値よりも小さいタイムスタンプを持つこれ以上の入力がないことをOracle CEPに通知します。

詳細は、以下を参照してください。


concat

構文

concat.pngについては周囲のテキストで説明しています。

目的

concatは、char2に連結されたchar1char[]として返すか、byte2に連結されたbyte1byte[]として返します。返される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-2 concat関数のストリーム入力

Timestamp   Tuple
 1000
 2000       hi
 8000       hi1
 9000
15000       xyz
h 200000000

例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は、問合せで返されるリレーションを示します。

例8-4 連結演算子(||)の問合せ

<query id="q264"><![CDATA[ 
    select
        c2 || "xyz"
    from
        S10
]]></query>

例8-5 連結演算子(||)のストリーム入力

Timestamp   Tuple
1           1,abc
2           2,ab
3           3,abc
4           4,a
h 200000000

例8-6 連結演算子(||)のリレーション出力

Timestamp   Tuple Kind  Tuple
1:          +           abcxyz
2:          +           abxyz
3:          +           abcxyz
4:          +           axyz

hextoraw

構文

hextoraw.pngについては周囲のテキストで説明しています。

目的

hextorawは、char文字セット内の16進数を含むcharをRAW値に変換します。


関連項目:

「rawtohex」

例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>

例8-8 hextoraw関数のストリーム入力

Timestamp   Tuple
1000        1,"51c1"
2000        2,"52"
3000        3,"53aa"
4000        4,"5"
5000         ,"55ef"
6000        6,
h 8000
h 200000000

例8-9 hextoraw関数のリレーション出力

Timestamp   Tuple Kind  Tuple
2000        +           2,"52"
3000        +           3,"53aa"
4000        -           2,"52"
5000        -           3,"53aa"
5000        +            ,"55ef"
7000        -            ,"55ef"

length

構文

length.pngについては周囲のテキストで説明しています。

目的

length関数は、char式またはbyte式の長さをintとして返します。lengthでは、入力文字セットで定義されている文字を使用して長さを計算します。

char式の場合は、すべての末尾の空白が長さに含まれます。式がnullの場合、この関数はnullを返します。

例8-10の問合せchr_len例8-11のデータ・ストリームS2があるとします。ストリームS2のスキーマは(c1 integer, c2 integer)です。例8-12は、問合せで返されるリレーションを示します。

例8-10 length関数の問合せ

<query id="chr_len"><![CDATA[ 
    select length(c1) from S4[range 5]
]]></query>

例8-11 length関数のストリーム入力

Timestamp   Tuple
 1000
 2000       hi
 8000       hi1
 9000
15000       xyz
h 200000000

例8-12 length関数のリレーション出力

Timestamp   Tuple Kind  Tuple
 1000:      +           0
 2000:      +           2
 6000:      -           0
 7000:      -           2
 8000:      +           3
 9000:      +           0
13000:      -           3
14000:      -           0
15000:      +           3
20000:      -           3

lk

構文

lk.pngについては周囲のテキストで説明しています。

目的

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>

例8-14 lk関数のストリーム入力

Timestamp   Tuple
1           Steven,King
2           Sten,Harley
3           Stephen,Stiles
4           Steven,Markles
h 200000000

例8-15 lk関数のリレーション出力

Timestamp   Tuple Kind  Tuple
1:          +           Steven,King
3:          +           Stephen,Stiles
4:          +           Steven,Markles

nvl

構文

nvl.pngについては周囲のテキストで説明しています。

目的

nvlを使用すると、空白として返されるnullを問合せの結果内の文字列に置き換えることができます。expr1がnullの場合、NVLexpr2を返します。expr1がnullでない場合、NVLexpr1を返します。

引数expr1expr2は任意のデータ型にすることができます。この2つのデータ型が異なる場合、Oracle CEPでは一方の型をもう一方にあわせるように暗黙的に変換します。暗黙的な変換を行うことができない場合、Oracle CEPはエラーを返します。この暗黙的な変換は次のように実装されます。

例8-16の問合せq281例8-17のデータ・ストリームSNVLがあるとします。ストリームSNVLのスキーマは(c1 char(20), c2 integer)です。例8-18は、問合せで返されるリレーションを示します。

例8-16 nvl関数の問合せ

<query id="q281"><![CDATA[ 
    select nvl(c1,"abcd") from SNVL
]]></query>

例8-17 nvl関数のストリーム入力

Timestamp   Tuple
1              ,1
2            ab,2
3           abc,3
4              ,4
h 200000000

例8-18 nvl関数のリレーション出力

Timestamp   Tuple Kind  Tuple
1:          +           abcd
2:          +           ab
3:          +           abc
4:          +           abcd

prev

構文

prev.pngについては周囲のテキストで説明しています。

目的

prevは、現在のイベントが属するパーティション内にある、現在のイベントの前に発生したイベントのストリーム属性(関数の引数identifier2)の値を返します。該当する前のイベントがない場合は、NULLと評価されます。

指定されるストリーム要素の型は、次のいずれかになります。

この関数の戻り値の型は、指定されたストリーム属性の型によって異なります(関数の引数identifier2)。

この関数は次の引数を使用します。

説明:

prev(identifier1.identifier2)

例8-19の問合せq2例8-20のデータ・ストリームS1があるとします。ストリームS1のスキーマは(c1 integer)です。この例では、パターンAA.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>

例8-20 prev(identifier1.identifier2)関数のストリーム入力

Timestamp   Tuple
1000        35
3000        35
4000        10
5000         7

例8-21 prev(identifier1.identifier2)関数のリレーション出力

Timestamp   Tuple Kind  Tuple
5000:       +           35,7

prev(identifier1.identifier2, const_int1)

例8-22の問合せq35例8-23のデータ・ストリームS15があるとします。ストリームS15のスキーマは(c1 integer, c2 integer)です。この例では、パターンAA.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)です。この例では、パターンAA.c1 = prev(A.c1,3,5000000000L)と定義します。つまり、次の場合にパターンAが一致します。

この問合せは、例8-28に示す出力リレーションを返します。出力リレーションには、8000での出力はありません。例8-25は、8000でのイベントが属するパーティション(c2属性の値でパーティション化された)のコンテンツを示しています。

例8-25 8000でのイベントを含むパーティション

Timestamp   Tuple
1000        45,20
6000        45,20
7000        45,20
8000        45,20

例8-25に示すように、3つ前のイベント(1000でのイベント)のc1の値が現在のイベント(8000でのイベント)のc1の値と等しくても、範囲条件は満たされません。これら2つのイベントのタイムスタンプの差が5000000000ナノ秒を超えているためです。前のタプルは存在しないものとして処理され、prevNULLを返すため、条件は一致しません。

例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>

例8-27 prev(identifier1.identifier2, const_int1, const_int2)関数のストリーム入力

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-28 prev(identifier1.identifier2, const_int1, const_int2)関数のリレーション出力

Timestamp   Tuple Kind  Tuple
5000:       +           45

rawtohex

構文

rawtohex.pngについては周囲のテキストで説明しています。

目的

rawtohexは、RAW値を含むbytechar文字セット内の16進数に変換します。


関連項目:

「hextoraw」

例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>

例8-30 rawtohex関数のストリーム入力

Timestamp   Tuple
1000        1,"51c1"
2000        2,"52"
2500        7,"axc"
3000        3,"53aa"
4000        4,"5"
5000         ,"55ef"
6000        6,
h 8000
h 200000000

例8-31 rawtohex関数のリレーション出力

Timestamp   Tuple Kind  Tuple
 1000:      +           51c1
 2000:      +           52
 3000:      +           53aa
 4000:      +           05
 5000:      -           51c1
 5000:      +           55ef
 6000:      -           52
 6000:      +
 7000:      -           53aa
 8000:      -           05
 9000:      -           55ef
10000:      -

systimestamp

構文

systimestamp.pngについては周囲のテキストで説明しています。

目的

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>

例8-33 systimestamp関数のストリーム入力

Timestamp   Tuple
     1000   0.1 ,10
     1002   0.14,15
   200000   0.2 ,20
   400000   0.3 ,30
   500000   0.3 ,35
   600000       ,35
h 800000
100000000   4.04,40
h 200000000

例8-34 systimestamp関数のリレーション出力

Timestamp   Tuple Kind  Tuple
     1002:  +           0.14,15
   400000:  +           0.3 ,30
   500000:  +           0.3 ,35
   600000:  +               ,35
100000000:  +           4.04,40

to_bigint

構文

to_bigint.pngについては周囲のテキストで説明しています。

目的

to_bigintは、integerの引数と同等のbigintの数値を返します。

詳細は、以下を参照してください。

例8-35の問合せq282例8-36のデータ・ストリームS11があるとします。ストリームS11のスキーマは(c1 integer, name char(10))です。例8-37は、問合せで返されるリレーションを示します。

例8-35 to_bigint関数の問合せ

<query id="q282"><![CDATA[ 
    select nvl(to_bigint(c1), 5.2) from S11
]]></query>

例8-36 to_bigint関数のストリーム入力

Timestamp   Tuple
  10        1,abc
2000         ,ab
3400        3,abc
4700         ,a
h 8000
h 200000000

例8-37 to_bigint関数のリレーション出力

Timestamp   Tuple Kind  Tuple
  10:       +           1
2000:       +           5.2
3400:       +           3
4700:       +           5.2

to_boolean

構文

to_boolean.pngについては周囲のテキストで説明しています。

目的

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>

例8-39 to_boolean関数のストリーム入力

Timestamp   Tuple
1000        -2147483648, 0.1
2000        2147483647, 0.2
3000        12345678901, 0.3
4000        -12345678901, 0.1
5000        9223372036854775799, 0.2
6000        -9223372036854775799, 0.3
7000        , 0.1
8000        10000000000, 0.2
9000        60000000000, 0.3
h 200000000

例8-40 to_boolean関数のリレーション出力

Timestamp   Tuple Kind  Tuple
1000      +           true,-2147483648
1000      -           true,-2147483648
4000      +           true,-12345678901
4000      -           true,-12345678901
7000      +           ,
7000      -           ,

to_char

構文

to_char.pngについては周囲のテキストで説明しています。

目的

to_charは、integerdoublebigintfloattimestampまたは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>

例8-42 to_char関数のストリーム入力

Timestamp   Tuple
1000        99,99999, 99.9, 99.9999, "4 1:13:48.10", "08/07/2004 11:13:48", cep

例8-43 to_char関数のリレーション出力

Timestamp   Tuple Kind  Tuple
1000:       +           99,99999,99.9,99.9999,4 1:13:48.10,08/07/2004 11:13:48

to_double

構文

to_double.pngについては周囲のテキストで説明しています。

目的

to_doubleは、bigintintegerまたはfloat式の引数に対してdoubleの値を返します。bigintの引数がdoubleの精度を超える場合、Oracle CEPはエラーを返します。

詳細は、以下を参照してください。

例8-35の問合せq282例8-36のデータ・ストリームS11があるとします。ストリームS11のスキーマは(c1 integer, name char(10))です。例8-37は、問合せで返されるリレーションを示します。

例8-44 to_double関数の問合せ

<query id="q282"><![CDATA[ 
    select nvl(to_double(c1), 5.2) from S11
]]></query>

例8-45 to_double関数のストリーム入力

Timestamp   Tuple
  10        1,abc
2000         ,ab
3400        3,abc
4700         ,a
h 8000
h 200000000

例8-46 to_double関数のリレーション出力

Timestamp   Tuple Kind  Tuple
  10:       +           1
2000:       +           5.2
3400:       +           3
4700:       +           5.2

to_float

構文

to_float.pngについては周囲のテキストで説明しています。

目的

to_floatは、bigintまたはintegerの引数と同等のfloatの数値を返します。bigintの引数がfloatの精度を超える場合、Oracle CEPはエラーを返します。

詳細は、以下を参照してください。

例8-47の問合せq1例8-48のデータ・ストリームS11があるとします。ストリームS1のスキーマは(c1 integer, name char(10))です。例8-49は、問合せで返されるリレーションを示します。

例8-47 to_float関数の問合せ

<query id="q1"><![CDATA[ 
    select nvl(to_float(c1), 5.2) from S11
]]></query>

例8-48 to_float関数のストリーム入力

Timestamp   Tuple
  10        1, abc
2000         , ab
3400        3, abc
4700         , a
h 8000
h 200000000

例8-49 to_float関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:+ 1.02000:+ 5.23400:+ 3.04700:+ 5.2

to_timestamp

構文

to_timestamp.pngについては周囲のテキストで説明しています。

目的

to_timestampは、java.text.SimpleDateFormatの書式モデルに準拠しているcharリテラルをtimestampデータ型に変換します。to_timestamp関数には次の2つの形式があり、引数の数で区別されます。

詳細は、以下を参照してください。

例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>

例8-51 to_timestamp関数のストリーム入力

Timestamp   Tuple
1           1,"040807111348"
2           2,"050907101348"
3           3,"041007111348"
4           4,"060806111248"
h 200000000

例8-52 to_timestamp関数のリレーション出力

Timestamp   Tuple Kind  Tuple
2:          +           2,050907101348

xmlcomment

構文

xmlcomment.pngについては周囲のテキストで説明しています。

目的

xmlcommentは、二重引用符で区切られた定数Stringの引数をxmltypeとして返します。

xmlcommentを使用すると、整形式のXMLコメントを問合せ結果に追加できます。

この関数は次の引数を使用します。

この関数の戻り値の型は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

構文

xmlconcat.pngについては周囲のテキストで説明しています。

目的

xmlconcatは、カンマで区切られたxmltypeの引数の連結をxmltypeとして返します。

xmlconcatを使用すると、任意の組合せのxmltypeの引数を連結できます。

この関数は次の引数を使用します。

この関数の戻り値の型はxmltypeです。正確なスキーマはXMLデータの入力ストリームのスキーマによって異なります。

この関数は、SQLXのストリームを処理する場合に特に役立ちます。詳細は、「SQL/XML (SQLX)」を参照してください

xmltype以外のデータ型を連結するには、CONCATを使用します。詳細は、「concat」を参照してください。


関連項目:

「SQL/XML (SQLX)」

例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

構文

xmlexists.pngについては周囲のテキストで説明しています。

目的

xmlexistsは、XMLデータのストリームに対する連続した問合せを作成します。この問合せでは、指定したXQueryをXMLデータが満たすかどうかを示すbooleanを返します。

この関数は次の引数を使用します。

この関数の戻り値の型は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>

例8-60 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>"

例8-61 xmlexists関数のリレーション出力

Timestamp   Tuple Kind  Tuple
3:          +           false
4:          +           false
5:          +           true
6:          +           false

xmlquery

構文

xmlquery.pngについては周囲のテキストで説明しています。

目的

xmlqueryは、XMLデータのストリームに対する連続した問合せを作成します。この問合せでは、指定したXQueryを満たすXMLデータを返します。

この関数は次の引数を使用します。

この関数の戻り値の型は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>

例8-63 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>"

例8-64 xmlquery関数のリレーション出力

Timestamp   Tuple Kind  Tuple
3:          +
4:          +
5:          +           "<PDName>hello1</PDName>"
6:          +           "<PDName>hello2</PDName>"