| Oracle® Fusion Middleware Oracle Event Processing Oracle CQL言語リファレンス 12c リリース(12.1.3) E57533-04 |
|
![]() 前へ |
![]() 次へ |
この章では、Oracle Continuous Query Language (Oracle CQL)の式のリファレンスを提供します。式は、1つ以上の値と1つ以上の演算の組合せであり、確定値を持つ定数、値に評価される関数、または値を格納する属性を含みます。
式はそれぞれのデータ型に割り当てられます。この単純な式は4に評価され、データ型はNUMBER (構成要素と同じデータ型)です。
2*2
次の式は、関数と演算子を使用するより複雑な式の例です。この式は現在の日付に7日を加算し、合計から時間の要素を削除し、結果をCHARデータ型に変換します。
TO_CHAR(TRUNC(SYSDATE+7))
この章の内容は次のとおりです。
Oracle Event Processingには、次の式が用意されています。
集計(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 Event ProcessingではOracle CQL文の一部で式の形式の一部が使用できない場合があります。Oracle CQL文の式の制限の詳細は、「Oracle CQL文」で個々のOracle CQL文を参照してください。
このリファレンスの他の部分で説明している条件、Oracle CQL関数、Oracle CQL文でexprと示されている箇所では、適切な式表記を使用する必要があります。それに続く項では、様々な式の例をあげて説明しています。
注意:
ストリーム入力の例で、hで始まる行(h 3800など)はハートビート入力タプルです。これは、ハートビート値よりも小さいタイムスタンプを持つこれ以上の入力がないことをOracle Event Processingに通知します。
distinctを使用して集計の組込み関数を使用する場合は、aggr_distinct_expr集計式を使用します。distinctを使用しない集計の組込み関数を使用する場合は、「aggr_expr」を参照してください。
aggr_distinct_expr::=

arith_distinct_exprは集計式の引数として指定できます。
aggr_distinct_exprは次のOracle CQL文で使用できます。
詳細は、「組込みの集計関数」を参照してください。
次の例にCOUNT集計(Distinct)式の使用方法を示します。
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」を参照してください。
aggr_expr::=

(arith_expr::=およびxml_agg_expr::=)
arith_exprは集計式の引数として指定できます。
count組込み集計関数は、表5-1でリストされているいずれかの値で構成される単一の引数を使用し、示されたintを返します。
|
表5-1 COUNT集計関数の戻り値
|
firstおよびlast集計組込み関数は、次のピリオド区切りの値から成る単一の引数を使用します。
identifier1: DEFINE句で指定されたパターンの名前。
identifier2: CREATE STREAM文で指定されたストリーム要素の名前。
aggr_exprは次のOracle CQL文で使用できます。
詳細は、次を参照してください。
ストリーム要素の属性値、定数値、関数式の結果、集計組込み関数、case式またはdecodeの任意の組合せを使用して算術式を定義するには、arith_expr算術式を使用します。すべての一般的な算術演算子(+、-、*、/)および連結演算子(||)を使用できます。
arith_expr::=

(func_expr::=、aggr_expr::=、aggr_distinct_expr::=、case_expr::=、decode::=、arith_expr::=)
arith_exprは次のOracle CQL文で使用できます。
詳細は、「算術演算子」を参照してください。
ストリーム要素の属性値、定数値、関数式の結果、集計組込み関数、case式またはdecodeの任意の組合せを使用して1つ以上の算術式を定義するには、arith_expr_list算術式リストを使用します。すべての一般的な算術演算子(+、-、*、/)および連結演算子(||)を使用できます。
arith_expr_list::=
複数の条件でストリーム要素を評価するには、case式case_exprを使用します。
case_expr::=
searched_case_list::=
searched_case::=
simple_case_list::=
simple_case::=

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の次の例について説明します。
SELECT *でのcase_expr
問合せq97とデータ・ストリームS0があるとします。ストリームS1のスキーマは(c1 integer, c2 float)です。この問合せはリレーションを返します。
<query id="q97"><![CDATA[ select * from S0 where case when c2 < 25 then c2+5 when c2 > 25 then c2+10 end > 25 ]]></query>
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
Timestamp Tuple Kind Tuple 400000:+ 0.3,30 500000:+ 0.3,35 600000:+ ,35 100000000:+ 4.04,40
SELECTでのcase_expr
問合せq96とデータ・ストリームS0およびS1があるとします。ストリームS0のスキーマは(c1 float, c2 integer)であり、ストリームS1のスキーマは(c1 float, c2 integer)です。この問合せはリレーションを返します。
<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>
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
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
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::=

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)を使用できます。詳細は、「データ型」を参照してください。
search、resultおよびdefaultの各値は式から派生できます。Oracle Event Processingでは短絡評価が使用されます。すべてのsearch値を評価してからそれらをexprと比較するかわりに、各search値はexprとの比較が行われる前にのみ評価されます。このため、Oracle Event Processingでは、前回の検索j (0 < j < i)がexprと一致した場合に検索iは評価されません。
Oracle Event Processingでは、比較を行う前にexprと各search値が最初のsearch値のデータ型に自動的に変換されます。Oracle Event Processingにより、戻り値は最初のresultと同じデータ型に自動的に変換されます。
DECODE式では、Oracle Event Processingによって2つのnullが同等と見なされます。exprがnullのときには、Oracle Event Processingにより、同様にnullである最初のsearchのresultが返されます。
expr、searches、resultsおよびdefaultを含むDECODE式の要素の最大数は255です。
decode式はcase_exprと同様です(「case_expr::=」を参照)。
decode式は次のOracle CQL文で使用できます。
問合せqと入力リレーションRがあるとします。リレーションRのスキーマは(c1 float, c2 integer)です。この問合せはリレーションを返します。
<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>
Timestamp Tuple Kind Tuple
1000: + 0.1,10
1002: + 0.14,15
2000: - 0.1,10
2002: - 0.14,15
200000: + 0.2,20
201000: - 0.2,20
400000: + 0.3,30
401000: - 0.3,30
500000: + 0.3,35
501000: - 0.3,35
600000: + 0.3,35
601000: - 0.3,35
100000000: + 4.04,40
100001000: - 4.04,40
Timestamp Tuple Kind Tuple 1000: + 0.6 1002: + 0.44 2000: - 0.1,10 2002: - 0.14,15 200000: + 0.3 201000: - 0.2,20 400000: + 0.5 401000: - 0.3,30 500000: + 0.6 501000: - 0.3,35 100000000: + 4.34 100001000: - 4.34
任意のOracle CQL組込み関数、ユーザー定義関数またはOracleデータ・カートリッジ関数を使用して関数呼出しを定義するには、func_expr関数式を使用します。
func_expr::=

(xml_parse_expr::=、xmlelement_expr::=、xmlforest_expr::=、xmlcolattval_expr::=、func_name:=、link::=、arith_expr::=)

func_name
次のように、関数の識別子を明示的に指定できます。
Oracleデータ・カートリッジ関数の型によって、linkを使用してまたは使用せずに指定します。
詳細は、link::=を参照してください。
空の引数リストを使用して指定します。
1つ以上の引数の引数リストを使用して指定します。
個別の算術式を使用して指定します。
詳細は、aggr_distinct_exprを参照してください。
PREV
PREV関数は、次のピリオド区切りのidentifier引数から成る単一の引数を使用します。
identifier1: DEFINE句で指定されたパターンの名前。
identifier2: CREATE STREAM文で指定されたストリーム要素の名前。
また、PREV 関数は次のconst_int引数を使用します。
const_int: 現在のストリーム要素の前にある比較対象のストリーム要素の索引。デフォルトは1です。
const_bigint: 現在のストリーム要素の前にある比較対象のストリーム要素のタイムスタンプ。ストリーム要素のタイムスタンプを取得するには、ELEMENT_TIME疑似列を使用できます(「ELEMENT_TIME疑似列」を参照)。
詳細は、「prev」を参照してください。例については、「func_expr PREV関数の例」を参照してください。
XQuery: XMLEXISTSとXMLQUERY
xqryargs_listにバインドしたXMLストリーム要素データにOracle Event Processingによって適用されるXQueryを指定できます。詳細は、次を参照してください。
xqryargs_listは、selectリストからの1つ以上のストリーム要素、ASキーワード、XQuery変数または演算子(現在のノード演算子"."など)を表すconst_stringを使用する算術式から成る1つ以上のxqryargインスタンスのカンマ区切りのリストです。
例については、「func_expr XMLQUERY関数の例」を参照してください。
詳細は、「SQL/XML (SQLX)」を参照してください。
XMLCONCAT
SQL/XML (SQLX)
SQLX仕様はXMLデータをサポートするようにSQLを拡張します。
Oracle CQLではタイプSQLXのプロパティを含むイベント・タイプがサポートされます。この場合、Oracle Event ProcessingサーバーはOracle CQL内でSQLXからStringに変換し、出力時にStringからSQLXに変換します。
Oracle CQLではSQLXストリームからのデータを操作する次の式(および関数)を提供します。たとえば、SQLXストリーム要素を使用したXML要素または属性の作成、より大きいXMLフラグメントへの結合、XMLコンテンツまたはドキュメントの入力の解析などができます。
注意:
Oracle CQLでは、タイプXMLTYPEの列との外部リレーションはサポートされません(リレーショナル・データベース管理システムとの結合など)。詳細は、「Oracle CQL組込みデータ型」を参照してください。
Oracle CQL SQLX式の詳細は、次の項を参照してください。
Oracle CQL SQLX関数の詳細は、次の項を参照してください。
Oracle CQLでXMLを使用する場合のデータ型の制限については、次の項を参照してください。
FIRSTとLAST
FIRST関数とLAST関数は、次のピリオド区切りの個別の値から成る単一の引数をそれぞれ使用します。
identifier1: DEFINE句で指定されたパターンの名前。
identifier2: CREATE STREAM文で指定されたストリーム要素の名前。
詳細は、次を参照してください。
関数の識別子は、non_mt_arg_list (呼び出される組込み関数またはユーザー定義関数に対して有効な引数のリスト)を明示的に使用するかどうかにかかわらず指定できます。リストには、1つまたは複数の引数を含めることができます。
func_exprは次のOracle CQL文で使用できます。
詳細は、「関数」を参照してください。
この項では、func_exprの次の例について説明します。
func_expr PREV関数の例
次の例に、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関数の例
次の例に、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>
次の例に、SUM関数を呼び出すfunc_exprの作成方法を示します。
<query id="q3"><![CDATA[ select sum(c2) from S1[range 5] ]]></query>
データ・カートリッジ複合型のメンバーを参照するには、object_expr式を使用します。
object_exprは、算術式が使用できる場所であればどこでも使用できます。詳細は、「arith_expr」を参照してください。
object_expr::=


external_qualified_identifier::=

()
external_identifier::=

nested_method_field_expr::=

array_expr::=

method_expr::=

オプションとして、object_exprでリンク(@)を使用してデータ・カートリッジ名を指定できます。必要に応じて、linkを使用してOracle CQLデータ・カートリッジ複合型のクラス、メソッド、フィールドまたはコンストラクタの場所を指定し、参照の曖昧性を解消します。この場所は、名前でデータ・カートリッジを参照する必要があります。たとえば、2つのデータ・カートリッジ(myCartridgeとyourCartridge)の両方が複合型com.package.ThisClassを定義する場合、link句を使用して、使用するcom.package.ThisClassを明示的に特定する必要があります。
注意:
デフォルトのJavaデータ・カートリッジで提供されている型を使用する場合、linkは不要です。
link::=


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はその組込み関数に対して参照を解決しようとします(「関数」を参照)。
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」を参照してください。
次の例では、この文でサポートされる様々なセマンティクスを示します。
オブジェクト式の例
次の例にobject_exprを示します。
getContainingGeometries@spatial (InputPoints.point)
このobject_exprは、1つのパラメータ(InputPoints.point)を渡してOracle SpatialメソッドgetContainingGeometriesを呼び出すデータ・カートリッジTABLE句を使用します。このメソッドの戻り値、Oracle Event Processing ITypeレコードのCollectionには、別名validGeometriesが作成されます。表ソース自体には別名R2が作成されます。
<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
次の例は、Javaクラスとしてイベント・タイプを作成する方法を示しています。このJavaクラスは、Oracle CQLデータ・カートリッジmyCartridgeに属するパッケージcom.mypackageで定義されたOracle CQLデータ・カートリッジ複合型MyTypeとしてイベント・プロパティを指定します。com.myPackage.MyTypeが他のOracle CQLデータ・カートリッジで定義されている場合(データ・カートリッジ名otherCatridgeで)、リンクとデータ・カートリッジ名myCartridgeを使用してa1プロパティの型を指定することで、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
次の例に、複合型MyTypeをインスタンス化して静的フィールドMY_FIELDにアクセスする方法を示します。link句は、Oracle CQLデータ・カートリッジmyCartridgeに属するcom.myPackage.MyTypeクラスを明示的に参照します。
<query id="q1"><![CDATA[ SELECT com.myPackage.MyType@myCartridge(“foo").MY_FIELD ... ]]></query>
メソッド・アクセスの例: link
次の例に、複合型MyTypeをインスタンス化してメソッドmyMethodにアクセスする方法を示します。link句は、Oracle CQLデータ・カートリッジmyCartridgeに属するcom.myPackage.MyTypeクラスを明示的に参照します。
<query id="q1"><![CDATA[
SELECT com.myPackage.MyType@myCartridge(“foo").myMethod("bar") ...
]]></query>
コンストラクタ呼出しの例: link
次の例に、複合型MyTypeをインスタンス化する方法を示します。link句は、Oracle CQLデータ・カートリッジmyCartridgeに属するcom.myPackage.MyTypeクラスを明示的に参照します。
<query id="q1"><![CDATA[ SELECT com.myPackage.MyType@myCartridge(“foo") ... ]]></query>
Oracle Event Processingが問合せで選択されたタプルを返すソート順を指定するには、order_expr式を使用します。
order_expr::=

ストリーム要素はattr名で指定できます。
または、const_int索引でもストリーム要素を指定できます。索引はストリームの登録または作成時に指定したストリーム要素の位置に対応します。
ストリームS3のスキーマは(c1 bigint, c2 interval, c3 byte(10), c4 float)です。この例は、問合せq210の結果をc1、c2の順でソートする方法と、問合せq211の結果をc2、索引3のストリーム要素(c3)、索引4のストリーム要素(c4)の順でソートする方法を示します。
<query id="q210"><![CDATA[ select * from S3 order by c1 desc nulls first, c2 desc nulls last ]]></query> <query id="q211"><![CDATA[ select * from S3 order by c2 desc nulls first, 3 desc nulls last, 4 desc ]]></query>
XMLフラグメントのコレクションを集計されたXMLドキュメントとして返すには、xml_agg_expr式を使用します。nullを返す引数は結果から削除されます。
xml_agg_expr::=

xml_agg_exprは集計式の引数として指定できます。
xml_agg_exprは次のOracle CQL文で使用できます。
詳細は、次を参照してください。
問合せtkdata67_q1と入力リレーションtkdata67_S0があるとします。リレーションtkdata67_S0のスキーマは(c1 integer, c2 float)です。この問合せはリレーションを返します。
<query id="tkdata67_q1"><![CDATA[
select
c1,
xmlagg(xmlelement("c2",c2))
from
tkdata67_S0[rows 10]
group by c1
]]></query>
Timestamp Tuple 1000 15, 0.1 1000 20, 0.14 1000 15, 0.2 4000 20, 0.3 10000 15, 0.04 h 12000
Timestamp Tuple Kind Tuple 1000: + 15,<c2>0.1</c2> <c2>0.2</c2> 1000: + 20,<c2>0.14</c2> 4000: - 20,<c2>0.14</c2> 4000: + 20,<c2>0.14</c2> <c2>0.3</c2> 10000: - 15,<c2>0.1</c2> <c2>0.2</c2> 10000: + 15,<c2>0.1</c2> <c2>0.2</c2> <c2>0.04</c2>
XMLフラグメントを作成し、各XMLフラグメントに名前列と属性名が含まれるように結果のXMLを拡張するには、xmlcolattval_expr式を使用します。
xmlcolattval_expr::=

xmlcolattval_exprは関数式の引数として指定できます。特に、SQLXストリームの処理に役立ちます。詳細は、「SQL/XML (SQLX)」を参照してください。
xmlcolattval_exprはfunc_expr::=のOracle CQL文で使用できます。
問合せtkdata53_q1と入力リレーションtkdata53_S0があるとします。リレーションtkdata53_S0のスキーマは(c1 integer, c2 float)です。この問合せはリレーションを返します。
<query id="tkdata53_q1"><![CDATA[
select
XMLELEMENT("tkdata53_S0", XMLCOLATTVAL( tkdata53_S0.c1, tkdata53_S0.c2))
from
tkdata53_S0 [range 1]
]]></query>
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
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式を使用します。
xmlelement_expr::=

(arith_expr::=およびarith_expr_list::=)
xmlelement_exprは関数式の引数として指定できます。特に、SQLXストリームの処理に役立ちます。詳細は、「SQL/XML (SQLX)」を参照してください。
xmlelement_exprは次のOracle CQL文で使用できます。
問合せtkdata51_q0と入力リレーションtkdata51_S0があるとします。リレーションtkdata51_S0のスキーマは(c1 integer, c2 float)です。この問合せはリレーションを返します。
<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>
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
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::=

xmlforest_exprは関数式の引数として指定できます。特に、SQLXストリームの処理に役立ちます。詳細は、「SQL/XML (SQLX)」を参照してください。
xmlforest_exprは次のOracle CQL文で使用できます。
問合せtkdata52_q0と入力リレーションtkdata52_S0があるとします。リレーションtkdata52_S0のスキーマは(c1 integer, c2 float)です。この問合せはリレーションを返します。
<query id="tkdata52_q0"><![CDATA[ select XMLFOREST( tkdata52_S0.c1, tkdata52_S0.c2) from tkdata52_S0 [range 1] ]]></query>
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
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::=

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文で使用できます。
この項では、xml_parse_exprの次の例について説明します。
xml_parse_exprコンテンツの例
問合せtkdata62_q3と入力リレーションtkdata62_S1があるとします。リレーションtkdata62_S1のスキーマは(c1 char(30))です。この問合せはリレーションを返します。
<query id="tkdata62_q3"><![CDATA[ select XMLPARSE(CONTENT c1) from tkdata62_S1 ]]></query>
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>"
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ドキュメントの例
問合せtkdata62_q4と入力リレーションtkdata62_S1があるとします。リレーションtkdata62_S1のスキーマは(c1 char(30))です。この問合せはリレーションを返します。
<query id="tkdata62_q4"><![CDATA[ select XMLPARSE(DOCUMENT c1) from tkdata62_S1 ]]></query>
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>"
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整形式の例
問合せtkdata62_q2と入力リレーションtkdata62_Sがあるとします。リレーションtkdata62_Sのスキーマは(c char(30))です。この問合せはリレーションを返します。
<query id="tkdata62_q2"><![CDATA[ select XMLPARSE(DOCUMENT c WELLFORMED) from tkdata62_S ]]></query>
Timestamp Tuple 1000 "<a>3</a>" 1000 "<e3>blaaaaa</e3>" 1000 "<r>4</r>" 1000 "<a/>" 1003 "<a>s3</a>" 1004 "<d>b6</d>"
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>