この章では、Oracle Continuous Query Language (Oracle CQL)の式のリファレンスを提供します。式は、1つ以上の値と1つ以上の演算の組合せであり、確定値を持つ定数、値に評価される関数、または値を格納する属性を含みます。
式はそれぞれのデータ型に割り当てられます。この単純な式は4に評価され、データ型はNUMBER
(構成要素と同じデータ型)です。
2*2
次の式は、関数と演算子を使用するより複雑な式の例です。この式は現在の日付に7日を加算し、合計から時間の要素を削除し、結果をCHAR
データ型に変換します。
TO_CHAR(TRUNC(SYSDATE+7))
この章の内容は次のとおりです。
Oracle Stream Analyticsには、次の式が用意されています。
集計(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 Stream AnalyticsではOracle CQL文の一部で式の形式の一部が使用できない場合があります。Oracle CQL文の式の制限の詳細は、「Oracle CQL文」で個々のOracle CQL文を参照してください。
このリファレンスの他の部分で説明している条件、Oracle CQL関数、Oracle CQL文でexpr
と示されている箇所では、適切な式表記を使用する必要があります。それに続く項では、様々な式の例をあげて説明しています。
注意:
ストリーム入力の例で、h
で始まる行(h 3800
など)はハートビート入力タプルです。これは、ハートビート値よりも小さいタイムスタンプを持つこれ以上の入力がないことをOracle Stream Analyticsに通知します。
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 Stream Analyticsは、短絡評価を使用します。すべてのsearch
値を評価してからそれらをexpr
と比較するかわりに、各search
値はexpr
との比較が行われる前にのみ評価されます。このため、Oracle Stream Analyticsでは、前回の検索j (0 < j < i)
がexpr
と一致した場合に検索i
は評価されません。
Oracle Stream Analyticsは、expr
と各search
値を、最初のsearch
値のデータ型に自動的に変換してから、比較を実行します。Oracle Stream Analyticsにより、戻り値は最初のresult
と同じデータ型に自動的に変換されます。
DECODE
式では、Oracle Stream Analyticsによって2つのnullが同等と見なされます。expr
がnullの場合、Oracle Stream Analyticsは同様に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 Stream Analytics 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 Stream Analyticsが問合せで選択されたタプルを返すソート順を指定するには、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
はOracle CQL文func_expr::=で使用できます。
問合せ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>