式とは、1つ以上の値と1つ以上の演算の組合せです。値には、限定された値を持つ定数、値に評価される関数、または値を含む属性を使用できます。式はそれぞれのデータ型に割り当てられます。
次の単純な式は4に評価され、データ型はNUMBER
(構成要素と同一のデータ型)です。
2*2
次の式は、関数と演算子を使用するより複雑な式の例です。この式は現在の日付に7日を加算し、合計から時間の要素を削除し、結果をCHAR
データ型に変換します。
TO_CHAR(TRUNC(SYSDATE+7))
Oracle CEPでは、次の式が用意されています。
集計(distinct)式: 「aggr_distinct_expr」
集計式: 「aggr_expr」
算術式: 「arith_expr」
算術式リスト: 「arith_expr_list」
Case式: 「case_expr」
Decode式: 「decode」
関数式: 「func_expr」
オブジェクト式: 「object_expr」
順序式: 「order_expr」
XML集計式: 「xml_agg_expr」
XML列属性値式: 「xmlcolattval_expr」
XML要素式: 「xmlelement_expr」
XMLフォレスト式: 「xmlforest_expr」
XML解析式: 「xml_parse_expr」
次の場所で式を使用できます。
SELECT
文のselectリスト
WHERE
句およびHAVING
句の条件
Oracle CEPではOracle CQL文の一部で式の形式の一部が使用できない場合があります。Oracle CQL文の式の制限の詳細は、第20章「Oracle CQL文」で個々のOracle CQL文を参照してください。
このリファレンスの他の部分で説明している条件、Oracle CQL関数、Oracle CQL文でexpr
と示されている箇所では、適切な式表記を使用する必要があります。それに続く項では、様々な式の例をあげて説明しています。
注意: ストリーム入力の例で、h で始まる行(h 3800 など)はハートビート入力タプルです。これは、ハートビート値よりも小さいタイムスタンプを持つこれ以上の入力がないことをOracle CEPに通知します。 |
distinct
を使用して集計の組込み関数を使用する場合は、aggr_distinct_expr
集計式を使用します。distinct
を使用せずに集計の組込み関数を使用する場合は、「aggr_expr」を参照してください。
arith_distinct_expr
は集計式の引数として指定できます。
aggr_distinct_expr
は次のOracle CQL文で使用できます。
詳細は、第9章「組込みの集計関数」を参照してください。
例
例5-2にCOUNT
集計(Distinct)式の使用方法を示します。
例5-1 COUNTのaggr_distinct_expr
create view viewq2Cond1(ACCT_INTRL_ID, sumForeign, countForeign) as select ACCT_INTRL_ID, sum(TRXN_BASE_AM), count(distinct ADDR_CNTRY_CD) from ValidCashForeignTxn[range 48 hours] group by ACCT_INTRL_ID having ((sum(TRXN_BASE_AM) * 100) >= (1000 * 60) and (count(distinct ADDR_CNTRY_CD >= 2)))
集計の組込み関数を使用する場合は、aggr_distinct_expr
集計式を使用します。distinct
を使用して集計の組込み関数を使用する場合は、「aggr_distinct_expr」を参照してください。
(arith_expr::=、identifier::=、attr::=、xml_agg_expr::=)
arith_expr
は集計式の引数として指定できます。
count
組込み集計関数は、表5-1でリストされているいずれかの値で構成される単一の引数を使用し、示されたint
を返します。
表5-1 COUNT集計関数の戻り値
入力引数 | 戻り値 |
---|---|
|
|
|
|
|
|
|
|
first
およびlast
集計組込み関数は、次のピリオド区切りの値から成る単一の引数を使用します。
identifier1
: DEFINE
句で指定されたパターンの名前。
identifier2
: CREATE STREAM
文で指定されたストリーム要素の名前。
aggr_expr
は次のOracle CQL文で使用できます。
詳細は、以下を参照してください。
例
例5-2にCOUNT
集計式の使用方法を示します。
ストリーム要素の属性値、定数値、関数式の結果、集計組込み関数、case式またはdecodeの任意の組合せを使用して算術式を定義するには、arith_expr
算術式を使用します。すべての一般的な算術演算子(+
、-
、*
、/
)および連結演算子(||
)を使用できます。
(attr::=、const_value::=、func_expr::=、aggr_expr::=、aggr_distinct_expr::=、case_expr::=、decode::=、arith_expr::=)
arith_expr
は次のOracle CQL文で使用できます。
詳細は、「算術演算子」を参照してください。
例
例5-3にarith_expr
式の使用方法を示します。
ストリーム要素の属性値、定数値、関数式の結果、集計組込み関数、case式またはdecodeの任意の組合せを使用して1つ以上の算術式を定義するには、arith_expr_list
算術式リストを使用します。すべての一般的な算術演算子(+
、-
、*
、/
)および連結演算子(||
)を使用できます。
arith_expr_list
は次のOracle CQL文で使用できます。
詳細は、「算術演算子」を参照してください。
例
例5-4にarith_expr_list
式の使用方法を示します。
複数の条件でストリーム要素を評価するには、case式case_expr
を使用します。
(searched_case_list::=、arith_expr::=、simple_case_list::=)
(non_mt_cond_list::=、arith_expr::=)
case_expr
は算術式のDECODE
句と同様です(「decode」を参照)。
searched_case
句では、non_mt_cond_list
がtrueに評価される場合、searched_case
句によって算術式またはnullのいずれかが返されます。
simple_case
句では、算術式がtrueである場合、simple_case
句によって別の算術式またはnullのいずれかが返されます。
case_expr
は次のOracle CQL文で使用できます。
例
この項では、case_expr
の次の例について説明します。
case_expr with SELECT *
例5-5の問合せq97
と例5-6のデータ・ストリームS0
があるとします。ストリームS1
のスキーマは(c1 float, c2 integer)
です。例5-7は、問合せで返されるリレーションを示します。
例5-5 CASE式: SELECT *の問合せ
<query id="q97"><![CDATA[ select * from S0 where case when c2 < 25 then c2+5 when c2 > 25 then c2+10 end > 25 ]]></query>
例5-6 CASE式: SELECT *のストリーム入力
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
例5-6 CASE式: SELECT *のリレーション出力
Timestamp Tuple Kind Tuple 400000:+ 0.3,30 500000:+ 0.3,35 600000:+ ,35 100000000:+ 4.04,40
case_expr with SELECT
例5-8の問合せq96
と例5-9のS0
および例5-10のS1
の各データ・ストリームがあるとします。ストリームS0
のスキーマは(c1 float, c2 integer)
です。ストリームS1
のスキーマは(c1 float, c2 integer)
です。例5-11は、問合せで返されるリレーションを示します。
例5-8 CASE式: SELECTの問合せ
<query id="q96"><![CDATA[ select case to_float(S0.c2+10) when (S1.c2*100)+10 then S0.c1+0.5 when (S1.c2*100)+11 then S0.c1 else S0.c1+0.3 end from S0[rows 100], S1[rows 100] ]]></query>
例5-9 CASE式: SELECTのストリームS0入力
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
例5-10 CASE式: SELECTのストリームS1入力
Timestamp Tuple 1000 10,0.1 1002 15,0.14 200000 20,0.2 300000 ,0.2 400000 30,0.3 100000000 40,4.04
例5-11 CASE式: SELECTのリレーション出力
Timestamp Tuple Kind Tuple 1000: + 0.6 1002: + 0.44 1002: + 0.4 1002: + 0.14 200000: + 0.5 200000: + 0.5 200000: + 0.4 200000: + 0.44 200000: + 0.7 300000: + 0.4 300000: + 0.44 300000: + 0.7 400000: + 0.6 400000: + 0.6 400000: + 0.6 400000: + 0.6 400000: + 0.4 400000: + 0.44 400000: + 0.5 400000: + 0.8 500000: + 0.6 500000: + 0.6 500000: + 0.6 500000: + 0.6 500000: + 0.6 600000: + 600000: + 600000: + 600000: + 600000: + 100000000: + 4.34 100000000: + 4.34 100000000: + 4.34 100000000: + 4.34 100000000: + 4.34 100000000: + 0.4 100000000: + 0.44 100000000: + 0.5 100000000: + 0.6 100000000: + 0.6 100000000: + 100000000: + 4.34
複数の条件でストリーム要素を評価するには、decode
式を使用します。
DECODE
では、次の形式を持つnon_mt_arg_listが予期されます。
expr, search1, result1, search2, result2, ... , searchN, result N, default
DECODE
は、expr
を各search
値と1つずつ比較します。expr
がsearch
値と一致した場合、DECODE
式は対応するresult
値を返します。一致する値がない場合、DECODE
式はdefault
を返します。default
が省略されている場合、DECODE
式はnullを返します。
引数には任意の数値データ型(INTEGER
、BIGINT
、FLOAT
、DOUBLE
)または文字データ型(CHAR
)を使用できます。詳細は、2.2項「データ型」を参照してください。
search
、result
およびdefault
の各値は式から派生できます。Oracle CEPでは短絡評価が使用されます。すべてのsearch
値を評価してからそれらをexpr
と比較するかわりに、各search
値はexpr
との比較が行われる前にのみ評価されます。このため、Oracle CEPでは、前回の検索j (0 < j < i)
がexpr
と一致した場合に検索i
は評価されません。
Oracle CEPでは、比較を行う前にexpr
と各search
値が最初のsearch
値のデータ型に自動的に変換されます。戻り値は最初のresult
と同じデータ型に自動的に変換されます。
DECODE
式では、Oracle CEPによって2つのnullが同等と見なされます。expr
がnullのとき、Oracle CEPでは最初のsearch
が同様にnullである場合にそのresult
が返されます。
expr
、searches
、results
およびdefault
を含むDECODE
式の要素の最大数は255です。
decode
式はcase_expr
と同様です(case_expr::=を参照)。
decode
式は次のOracle CQL文で使用できます。
例
例5-12の問合せq
と例5-13のリレーションR
があるとします。リレーションR
のスキーマは(c1 float, c2 integer)
です。例5-14は、問合せで返されるリレーションを示します。
例5-12 算術式とDECODEの問合せ
<query id="q"><![CDATA[ ... SELECT DECODE (c2, 10, c1+0.5, 20, c1+0.1, 30, c1+0.2, c1+0.3) from R ]]></query>
任意のOracle CQL組込み関数、ユーザー定義関数またはOracleデータ・カートリッジ関数を使用して関数呼出しを定義するには、func_expr
関数式を使用します。
(identifier::=、const_int::=、const_bigint::=、const_string::=、xqryargs_list::=、non_mt_arg_list::=、xml_parse_expr::=、xmlelement_expr::=、xmlforest_expr::=、xmlcolattval_expr::=、func_name:=、link::=、arith_expr::=)
func_name
Oracleデータ・カートリッジ関数の型によって、link
を使用してまたは使用せずに指定します。
詳細は、以下を参照してください。
空の引数リストを使用して指定します。
1つ以上の引数の引数リストを使用して指定します。
個別の算術式を使用して指定します。
詳細は、aggr_distinct_exprを参照してください。
PREV
PREV
関数は、次のピリオド区切りのidentifier引数から成る単一の引数を使用します。
identifier1
: DEFINE
句で指定されたパターンの名前。
identifier2
: CREATE STREAM
文で指定されたストリーム要素の名前。
また、PREV
関数は次のconst_int引数を使用します。
const_int
: 現在のストリーム要素の前にある比較対象のストリーム要素の索引。デフォルト: 1。
const_bigint
: 現在のストリーム要素の前にある比較対象のストリーム要素のタイムスタンプ。ストリーム要素のタイムスタンプを取得するには、ELEMENT_TIME
疑似列を使用できます(3.2項「ELEMENT_TIME疑似列」を参照)。
詳細は、「prev」を参照してください。例については、「func_expr PREV関数の例」を参照してください。
XQuery: XMLEXISTSとXMLQUERY
Oracle CEPによってXMLストリーム要素データに適用される、xqryargs_listにバインドされたXQueryを指定できます。詳細は、次の項を参照してください。
xqryargs_listは、selectリストからの1つ以上のストリーム要素、AS
キーワード、XQuery変数または演算子(現在のノード演算子"."など)を表すconst_stringを使用する算術式から成る1つ以上のxqryargインスタンスのカンマ区切りのリストです。詳細は、xqryargs_list::=を参照してください。
例については、「func_expr XMLQUERY関数の例」を参照してください。
詳細は、「SQL/XML (SQLX)」を参照してください。
XMLCONCAT
XMLCONCAT
関数は、カンマ区切りのxmltype
引数の連結をxmltype
として返します。
詳細は、以下を参照してください。
SQL/XML (SQLX)
SQLX仕様はXMLデータをサポートするようにSQLを拡張します。
Oracle CQLではタイプSQLX
のプロパティを含むイベント・タイプがサポートされます。この場合、Oracle CEPサーバーはOracle CQL内でSQLX
からString
に変換し、出力時にString
からSQLX
に変換します。
Oracle CQLではSQLXストリームからのデータを操作する次の式(および関数)を提供します。たとえば、SQLXストリーム要素を使用したXML要素または属性の作成、より大きいXMLフラグメントへの結合、XMLコンテンツまたはドキュメントの入力の解析などができます。
注意: Oracle CQLでは、タイプXMLTYPE の列との外部リレーションはサポートされません(リレーショナル・データベース管理システムとの結合など)。詳細は、2.2.1項「Oracle CQL組込みデータ型」を参照してください。 |
Oracle CQL SQLX式の詳細は、次の項を参照してください。
Oracle CQL SQLX関数の詳細は、次の項を参照してください。
Oracle CQLでXMLを使用する場合のデータ型の制限については、次の項を参照してください。
SQLXの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
FIRSTとLAST
FIRST
関数とLAST
関数は、次のピリオド区切りの個別の値から成る単一の引数をそれぞれ使用します。
identifier1
: DEFINE
句で指定されたパターンの名前。
identifier2
: CREATE STREAM
文で指定されたストリーム要素の名前。
詳細は、以下を参照してください。
non_mt_arg_list
を明示的に使用して、または使用せずに、関数の識別子を指定できます。これは、組込み関数またはユーザー定義関数の呼び出しに適した引数のリストです。リストには単一または複数の引数を使用できます。
func_expr
は次のOracle CQL文で使用できます。
詳細は、1.1.11項「関数」を参照してください。
例
この項では、func_expr
の次の例について説明します。
func_expr PREV関数の例
例5-15に、PREV
関数を呼び出すfunc_exprの作成方法を示します。
例5-15 PREVのfunc_expr
<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>
func_expr XMLQUERY関数の例
例5-16に、XMLQUERY
関数を呼び出すfunc_exprの作成方法を示します。
例5-16 XMLQUERYのfunc_expr
<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 S1 ]]></query>
例5-17に、SUM
関数を呼び出すfunc_exprの作成方法を示します。
データ・カートリッジ複合型のメンバーを参照するには、object_expr
式を使用します。
object_expr
は、算術式が使用できる場所であればどこでも使用できます。詳細は、「arith_expr」を参照してください。
構文については、次の項を参照してください。
オプションとして、object_expr
でリンク(@
)を使用してデータ・カートリッジ名を指定できます。必要に応じて、link
を使用してOracle CQLデータ・カートリッジ複合型のクラス、メソッド、フィールドまたはコンストラクタの場所を指定し、参照の曖昧性を解消します。この場所は、名前でデータ・カートリッジを参照する必要があります。たとえば、2つのデータ・カートリッジ(myCartridge
とyourCartridge
)の両方が複合型com.package.ThisClass
を定義する場合、link
句を使用して、使用するcom.package.ThisClass
を明示的に特定する必要があります。
注意: デフォルトのJavaデータ・カートリッジで提供されている型を使用する場合、link は不要です。 |
link::=
(methodname::=、data_cartridge_name::=、param_list::=、qualified_type_name::=)
data_cartridge_name
各Oracle CQLデータ・カートリッジ実装は、一意のデータ・カートリッジ名で識別されます。
データ・カートリッジ名には、次のものが含まれます。
java
: Oracle CQL Javaデータ・カートリッジを識別します。
これはデフォルトのデータ・カートリッジ名です。フィールド参照またはコンストラクタ参照でデータ・カートリッジ名を省略すると、Oracle CQLはjava
データ・カートリッジ名を使用して参照を解決しようとします。すなわち、次の文は同一です。
SELECT java.lang.String@java(“foo”) … SELECT java.lang.String(“foo”) …
メソッド参照でデータ・カートリッジ名を省略すると、Oracle CQLはその組込み関数に対して参照を解決しようとします(1.1.11項「関数」を参照)。
spatial
: Oracle CQL Oracle Spatialを識別します。
構文については、data_cartridge_name::=(親: link::=)を参照してください。
型宣言
qualified_type_name
@
data_cartridge_name
を使用して、イベント・プロパティを複合型として宣言します。
例については、「型宣言の例: link」を参照してください。
フィールド・アクセス
複合型フィールドにアクセスする場合、フィールドの型によってすでに場所が識別されているため、リンクは指定できません。次の文は使用できません。
SELECT java.lang.String(“foo”).CASE_INSENSITIVE_ORDER@java …
例については、「フィールド・アクセスの例: link」を参照してください。
メソッド・アクセス
複合型メソッドにアクセスする場合、メソッドの型によってすでに場所が識別されているため、リンクは指定できません。次の文は使用できません。
SELECT java.lang.String(“foo”).substring@java(0,1) …
例については、「メソッド・アクセスの例: link」を参照してください。
コンストラクタ呼出し
qualified_type_name
@
data_cartridge_name
(
param_list
)
を使用して、複合型コンストラクタを呼び出します。
例については、「コンストラクタ呼出しの例: link」を参照してください。
例
次の例では、この文でサポートされる様々なセマンティクスを示します。
オブジェクト式の例
例5-18にobject_expr
を示します。
getContainingGeometries@spatial (InputPoints.point)
このobject_expr
は、1つのパラメータ(InputPoints.point
)を渡してOracle SpatialメソッドgetContainingGeometries
を呼び出すデータ・カートリッジTABLE
句を使用します。このメソッドの戻り値、Oracle CEP IType
レコードのCollection
には、別名validGeometries
が作成されます。表ソース自体には別名R2
が作成されます。
例5-18 データ・カートリッジTABLEの問合せ
<query id="q1"><![CDATA[ RSTREAM ( SELECT R2.validGeometries.shape as containingGeometry, R1.point as inputPoint FROM InputPoints[now] as R1, TABLE (getContainingGeometries@spatial (InputPoints.point) as validGeometries) AS R2 ) ]]></query>
型宣言の例: link
例5-19に、イベント・タイプを、イベント・プロパティをOracle CQLデータ・カートリッジmyCartridge
に属するパッケージcom.mypackage
で定義されたOracle CQLデータ・カートリッジ複合型MyType
として指定するJavaクラスとして作成する方法を示します。com.myPackage.MyType
が他のOracle CQLデータ・カートリッジで定義されている場合(データ・カートリッジ名otherCatridge
で)、リンクとデータ・カートリッジ名myCartridge
を使用してa1プロパティの型を指定することで、Oracle CQLは正しい複合型を参照できます。
例5-19 Oracle CQLデータ・カートリッジ・リンクを使用した型宣言
package com.myapplication.event; import java.util.Date; import // Oracle CQL data cartridge package(s)? public final class MarketEvent { private final String symbol; private final Double price; private final com.myPackage.MyType@myCartridge a1; public MarketEvent(...) { ... } ... }
フィールド・アクセスの例: link
例5-20に、複合型MyType
をインスタンス化して静的フィールドMY_FIELD
にアクセスする方法を示します。link句は、Oracle CQLデータ・カートリッジmyCartridge
に属するcom.myPackage.MyType
クラスを明示的に参照します。
例5-20 Oracle CQLデータ・カートリッジ・リンクを使用したフィールド・アクセス
<query id="q1"><![CDATA[ SELECT com.myPackage.MyType@myCartridge(“foo”).MY_FIELD ... ]]></query>
メソッド・アクセスの例: link
例5-21に、複合型MyType
をインスタンス化してメソッドmyMethod
にアクセスする方法を示します。link句は、Oracle CQLデータ・カートリッジmyCartridge
に属するcom.myPackage.MyType
クラスを明示的に参照します。
例5-21 Oracle CQLデータ・カートリッジ・リンクを使用した型宣言
<query id="q1"><![CDATA[ SELECT com.myPackage.MyType@myCartridge(“foo”).myMethod("bar") ... ]]></query>
コンストラクタ呼出しの例: link
例5-22に、複合型MyType
をインスタンス化する方法を示します。link句は、Oracle CQLデータ・カートリッジmyCartridge
に属するcom.myPackage.MyType
クラスを明示的に参照します。
Oracle CEPが問合せで選択されたタプルを返すソート順を指定するには、order_expr
式を使用します。
ストリーム要素はattr
名で指定できます。
または、const_int
索引でもストリーム要素を指定できます。索引はストリームの登録または作成時に指定したストリーム要素の位置に対応します。
order_expr
は次のOracle CQL文で使用できます。
例
例5-23を示します。ストリームS3
のスキーマは(c1 bigint, c2 interval, c3 byte(10), c4 float)
です。この例は、問合せq210
の結果をc1
、c2
の順でソートする方法と、問合せq211
の結果をc2
、索引3のストリーム要素(c3)
、索引4のストリーム要素(c4)
の順でソートする方法を示します。
XMLフラグメントのコレクションを集計されたXMLドキュメントとして返すには、xml_agg_expr
式を使用します。nullを返す引数は結果から削除されます。
(arith_expr、order_by_clause::=)
xml_agg_expr
は集計式の引数として指定できます。
xml_agg_expr
は次のOracle CQL文で使用できます。
詳細は、以下を参照してください。
『Oracle Database SQL言語リファレンス』のXMLAGGに関する項
例
例5-24の問合せtkdata67_q1
と例5-25の入力リレーションtkdata67_S0
があるとします。リレーションtkdata67_S0
のスキーマは(c1 integer, c2 float)
です。例5-26は、問合せで返されるリレーションを示します。
例5-24 xml_agg_exprの問合せ
<query id="tkdata67_q1"><![CDATA[ select c1, xmlagg(xmlelement("c2",c2)) from tkdata67_S0[rows 10] group by c1 ]]></query>
XMLフラグメントを作成し、各XMLフラグメントに名前列と属性名が含まれるように結果のXMLを拡張するには、xmlcolattval_expr
式を使用します。
xmlcolattval_expr
は関数式の引数として指定できます。特に、SQLXストリームの処理に役立ちます。詳細は、「SQL/XML (SQLX)」を参照してください。
xmlcolattval_expr
は次のOracle CQL文で使用できます。
詳細は、『Oracle Database SQL言語リファレンス』のXMLCOLATTVALに関する項を参照してください。
例
例5-24の問合せtkdata53_q1
と例5-25の入力リレーションtkdata53_S0
があるとします。リレーションtkdata53_S0
のスキーマは(c1 integer, c2 float)
です。例5-26は、問合せで返されるリレーションを示します。
例5-27 xmlcolattval_exprの問合せ
<query id="tkdata53_q1"><![CDATA[ select XMLELEMENT("tkdata53_S0", XMLCOLATTVAL( tkdata53_S0.c1, tkdata53_S0.c2)) from tkdata53_S0 [range 1] ]]></query>
例5-28 xmlcolattval_exprのリレーション入力
Timestamp Tuple 1000: 10, 0.1 1002: 15, 0.14 200000: 20, 0.2 400000: 30, 0.3 h 800000 100000000: 40, 4.04 h 200000000
例5-29 xmlcolattval_exprのリレーション出力
Timestamp Tuple Kind Tuple 1000: + <tkdata53_S0> <column name="c1">10</column> <column name="c2">0.1</column> </tkdata53_S0> 1002: + <tkdata53_S0> <column name="c1">15</column> <column name="c2">0.14</column> </tkdata53_S0> 2000: - <tkdata53_S0> <column name="c1">10</column> <column name="c2">0.1</column> </tkdata53_S0> 2002: - <tkdata53_S0> <column name="c1">15</column> <column name="c2">0.14</column> </tkdata53_S0> 200000: + <tkdata53_S0> <column name="c1">20</column> <column name="c2">0.2</column> </tkdata53_S0> 201000: - <tkdata53_S0> <column name="c1">20</column> <column name="c2">0.2</column> </tkdata53_S0> 400000: + <tkdata53_S0> <column name="c1">30</column> <column name="c2">0.3</column> </tkdata53_S0> 401000: - <tkdata53_S0> <column name="c1">30</column> <column name="c2">0.3</column> </tkdata53_S0> 100000000: + <tkdata53_S0> <column name="c1">40</column> <column name="c2">4.04</column> </tkdata53_S0> 100001000: - <tkdata53_S0> <column name="c1">40</column> <column name="c2">4.04</column> </tkdata53_S0>
ストリーム要素から整形式のXML要素を作成する必要がある場合は、xmlelement_expr
式を使用します。
(const_string::=、arith_expr::=、xml_attribute_list::=、arith_expr_list::=)
xmlelement_expr
は関数式の引数として指定できます。特に、SQLXストリームの処理に役立ちます。詳細は、「SQL/XML (SQLX)」を参照してください。
xmlelement_expr
は次のOracle CQL文で使用できます。
詳細は、『Oracle Database SQL言語リファレンス』のXMLELEMENTに関する項を参照してください。
例
例5-30の問合せtkdata51_q0
と例5-31の入力リレーションtkdata51_S0
があるとします。リレーションtkdata51_S0
のスキーマは(c1 integer, c2 float)
です。例5-32は、問合せで返されるリレーションを示します。
例5-30 xmlelement_exprの問合せ
<query id="tkdata51_q0"><![CDATA[ select XMLELEMENT( NAME "S0", XMLELEMENT(NAME "c1", tkdata51_S0.c1), XMLELEMENT(NAME "c2", tkdata51_S0.c2) ) from tkdata51_S0 [range 1] ]]></query>
例5-31 xmlelement_exprのリレーション入力
Timestamp Tuple 1000: 10, 0.1 1002: 15, 0.14 200000: 20, 0.2 400000: 30, 0.3 h 800000 100000000: 40, 4.04 h 200000000
例5-32 xmlelement_exprのリレーション出力
Timestamp Tuple Kind Tuple 1000: + <S0> <c1>10</c1> <c2>0.1</c2> </S0> 1002: + <S0> <c1>15</c1> <c2>0.14</c2> </S0> 2000: - <S0> <c1>10</c1> <c2>0.1</c2> </S0> 2002: - <S0> <c1>15</c1> <c2>0.14</c2> </S0> 200000: + <S0> <c1>20</c1> <c2>0.2</c2> </S0> 201000: - <S0> <c1>20</c1> <c2>0.2</c2> </S0> 400000: + <S0> <c1>30</c1> <c2>0.3</c2> </S0> 401000: - <S0> <c1>30</c1> <c2>0.3</c2> </S0> 100000000: + <S0> <c1>40</c1> <c2>4.04</c2> </S0> 100001000: - <S0> <c1>40</c1> <c2>4.04</c2> </S0>
各引数パラメータをXMLに変換し、これらの変換された引数を連結したXMLフラグメントを返すには、xmlforest_expr
を使用します。
xmlforest_expr
は関数式の引数として指定できます。特に、SQLXストリームの処理に役立ちます。詳細は、「SQL/XML (SQLX)」を参照してください。
xmlforest_expr
は次のOracle CQL文で使用できます。
詳細は、『Oracle Database SQL言語リファレンス』のXMLFORESTに関する項を参照してください。
例
例5-33の問合せtkdata52_q0
と例5-34の入力リレーションtkdata52_S0
があるとします。リレーションtkdata52_S0
のスキーマは(c1 integer, c2 float)
です。例5-35は、問合せで返されるリレーションを示します。
例5-33 xmlforest_exprの問合せ
<query id="tkdata52_q0"><![CDATA[ select XMLFOREST( tkdata52_S0.c1, tkdata52_S0.c2) from tkdata52_S0 [range 1] ]]></query>
例5-34 xmlforest_exprのリレーション入力
Timestamp Tuple 1000: 10, 0.1 1002: 15, 0.14 200000: 20, 0.2 400000: 30, 0.3 h 800000 100000000: 40, 4.04 h 200000000
例5-35 xmlforest_exprのリレーション出力
Timestamp Tuple Kind Tuple 1000: + <c1>10</c1> <c2>0.1</c2> 1002: + <c1>15</c1> <c2>0.14</c2> 2000: - <c1>10</c1> <c2>0.1</c2> 2002: - <c1>15</c1> <c2>0.14</c2> 200000: + <c1>20</c1> <c2>0.2</c2> 201000: - <c1>20</c1> <c2>0.2</c2> 400000: + <c1>30</c1> <c2>0.3</c2> 401000: - <c1>30</c1> <c2>0.3</c2> 100000000: + <c1>40</c1> <c2>4.04</c2> 100001000: - <c1>40</c1> <c2>4.04</c2>
arith_expr
の評価された結果からXMLインスタンスを解析および生成するには、xml_parse_expr
式を使用します。
xml_parse_expr
式の使用では、次のことに注意します。
arith_expr
がnullに解決される場合は、式でnullが返されます。
content
を指定した場合は、arith_expr
が有効なXML値に解決される必要があります。例については、「xml_parse_exprドキュメントの例」を参照してください。
document
を指定した場合は、arith_expr
が単一ルートのXMLドキュメントに解決される必要があります。例については、「xml_parse_exprドキュメントの例」を参照してください。
wellformed
を指定した場合はvalue_expr
が整形式のXMLドキュメントに解決されることを保証することになるため、正しい形式の入力を確認する有効性チェックがデータベースで実行されません。例については、「xml_parse_expr整形式の例」を参照してください。
xml_parse_expr
は関数式の引数として指定できます。特に、SQLXストリームの処理に役立ちます。詳細は、「SQL/XML (SQLX)」を参照してください。
xml_parse_expr
は次のOracle CQL文で使用できます。
詳細は、『Oracle Database SQL言語リファレンス』のXMLPARSEに関する項を参照してください。
例
この項では、xml_parse_expr
の次の例について説明します。
xml_parse_exprコンテンツの例
例5-36の問合せtkdata62_q3
と例5-37の入力リレーションtkdata62_S1
があるとします。リレーションtkdata62_S1
のスキーマは(c1 char(30))
です。例5-38は、問合せで返されるリレーションを示します。
例5-36 xml_parse_exprコンテンツ: 問合せ
<query id="tkdata62_q3"><![CDATA[ select XMLPARSE(CONTENT c1) from tkdata62_S1 ]]></query>
例5-37 xml_parse_exprコンテンツ: リレーション入力
Timestamp Tuple 1000 "<a>3</a>" 1000 "<e3>blaaaaa</e3>" 1000 "<r>4</r>" 1000 "<a></a> 1003 "<a>s3</a>" 1004 "<d>b6</d>"
例5-38 xml_parse_exprコンテンツ: リレーション出力
Timestamp Tuple Kind Tuple 1000: + <a>3</a> 1000: + <e3>blaaaaa</e3> 1000: + <r>4</r> 1000: + <a/> 1003: + <a>s3</a> 1004: + <d>b6</d>
xml_parse_exprドキュメントの例
例5-39の問合せtkdata62_q4
と例5-40の入力リレーションtkdata62_S1
があるとします。リレーションkdata62_S1
のスキーマは(c1 char(30))
です。例5-41は、問合せで返されるリレーションを示します。
例5-39 xml_parse_exprドキュメント: 問合せ
<query id="tkdata62_q4"><![CDATA[ select XMLPARSE(DOCUMENT c1) from tkdata62_S1 ]]></query>
例5-40 xml_parse_exprドキュメント: リレーション入力
Timestamp Tuple 1000 "<a>3</a>" 1000 "<e3>blaaaaa</e3>" 1000 "<r>4</r>" 1000 "<a></a> 1003 "<a>s3</a>" 1004 "<d>b6</d>"
例5-41 xml_parse_exprドキュメント: リレーション出力
Timestamp Tuple Kind Tuple 1000: + <a>3</a> 1000: + <e3>blaaaaa</e3> 1000: + <r>4</r> 1000: + <a/> 1003: + <a>s3</a> 1004: + <d>b6</d>
xml_parse_expr整形式の例
例5-42の問合せtkdata62_q2
と例5-43の入力リレーションtkdata62_S
があるとします。リレーションtkdata62_S
のスキーマは(c char(30))
です。例5-44は、問合せで返されるリレーションを示します。
例5-42 xml_parse_expr整形式: 問合せ
<query id="tkdata62_q2"><![CDATA[ select XMLPARSE(DOCUMENT c WELLFORMED) from tkdata62_S ]]></query>