1.14.4 SQL/XML 述語
- 〈この項の構成〉
(1) XMLEXISTS述語
(a) 機能
XQueryを評価した結果のXML型の値が,一つ以上のXQuery項目から構成されるXQueryシーケンスであるかどうかを判別します。
(b) 形式
XMLEXISTS ( XQuery問合せ PASSING BY VALUE XML問合せ引数 〔,XML問合せ引数 〕… ) XQuery問合せ ::= 文字列定数 XML問合せ引数 ::= {XML問合せ文脈項目 | XML問合せ変数} XML問合せ文脈項目 ::= 値式 〔 BY VALUE 〕 XML問合せ変数 ::= 値式 AS XQuery変数識別子 〔 BY VALUE 〕
(c) オペランド
-
XQuery問合せ ::= 文字列定数
評価するXQueryを文字列定数で指定します。XQueryの指定方法については,「XQuery」を参照してください。
-
XML問合せ引数 ::= { XML問合せ文脈項目 | XML問合せ変数 }
XQueryに渡す引数を指定します。
XML問合せ引数としてXQueryに渡す,XQueryシーケンスに含まれるXQuery項目の親プロパティは空になります。また,異なるXML問合せ引数に指定したXQueryシーケンスに,同じXML型の値の同じ部分を表すノードが含まれていた場合でも,XQueryの評価ではそれらを異なるノードとして扱います。
-
XML問合せ文脈項目 ::= 値式 〔 BY VALUE 〕
XQueryの評価対象である文脈項目を指定します。
指定しない場合は,XQueryの評価対象の文脈項目は設定しないで,XQuery問合せに指定したXQueryを一度評価します。
なお,この項目はPASSING句中に一つしか指定できません。
- 値式
-
結果がXML型の値となる値式を指定します。
この値式の結果である,XML型の値のXQueryシーケンスを構成する各XQuery項目が,XQueryの評価対象の文脈項目となります。
値式の結果がナル値の場合は,XMLEXISTS述語は不定となります。
指定できるものを次に示します。
-
列指定
-
列指定によって導出した名前付き導出表の列
-
- BY VALUE
-
指定の有無によって,XML問合せ文脈項目に指定した値式の結果の値の渡し方は変わりません。ISO規格との互換のためにサポートしています。
-
XML問合せ変数 ::= 値式 AS XQuery変数識別子 〔 BY VALUE 〕
XQuery問合せに指定された,XQuery中のXQuery変数に値を渡す場合に指定します。
- 値式
-
XQuery問合せに指定された,XQuery中のXQuery変数に渡す値式を指定します。
値式の結果がXML型でない場合は,XML型の値であるXQueryシーケンスに変換して渡します。
指定できるデータ型と,変換後の形式を次の表に示します。
表1‒40 XQuery変数に渡す値のデータ型と変換後のXML型の値の形式 データ型
変換後の形式
INTEGER
xs:int型の値※
SMALLINT
xs:int型の値※
DECIMAL
xs:decimal型の値※
FLOAT
xs:double型の値※
SMALLFLT
xs:double型の値※
CHAR
xs:string型の値※
VARCHAR
xs:string型の値※
MCHAR
xs:string型の値※
MVARCHAR
xs:string型の値※
DATE
xs:date型の値※
TIME
xs:time型の値※
TIMESTAMP
xs:dateTime型の値※
XML
変換しません
(値式に指定したXML型の値と同じ形式になります)
XQueryシーケンスに変換できない場合は,エラーとなります。
また,値式の結果がナル値の場合は,空のXQueryシーケンスである値をXQuery変数に渡します。
値式に指定できるものを次に示します。
-
定数
-
USER値関数,CURRENT_DATE値関数,CURRENT_TIME値関数,CURRENT_TIMESTAMP値関数
-
列指定
-
SQL変数又はSQLパラメタ
-
四則演算,日付演算,時刻演算,又は連結演算
-
スカラ関数
-
関数呼出し
-
CASE式
-
CAST指定
-
埋込み変数又は?パラメタ
-
スカラ副問合せ
-
上記のどれかの値式から導出した名前付き導出表の列
-
- AS XQuery変数識別子
-
値を渡すXQuery変数の識別子を指定します。
XQuery変数識別子にはXQuery問合せ中に指定したXQuery変数名を指定します。指定方法については,「名前の指定」を参照してください。
ここで指定したXQuery変数識別子のXML名前空間はXQuery問合せでの既定のXML名前空間となります。
ここで指定したXQuery変数識別子に対応するXQuery変数は,XQuery問合せで指定したXQuery全体が有効範囲になります。
同じPASSING句中のほかのXML問合せ変数で指定したXQuery変数識別子は指定できません。
- BY VALUE
-
指定の有無によって,XML問合せ変数に指定した値式の結果の値の渡し方は変わりません。ISO規格との互換のためにサポートしています。
値式の結果が,XML型となる場合だけ指定してください。値式の結果が,XML型でない場合に指定すると,エラーとなります。
(d) 述語が真となる場合
XQueryを評価した結果のXML型の値が一つ以上のXQuery項目から構成されるXQueryシーケンスである場合に,XMLEXISTS述語は真になります。
(e) 規則
-
この述語は,WHERE句にだけ指定できます。
-
副問合せ中には指定できません。
(f) 使用例
書籍情報列に,書籍管理表から埋込み変数(price)で指定された値以上の価格である書籍情報が格納された行の書籍ID列の値を取得します。
SELECT 書籍ID FROM 書籍管理表 WHERE XMLEXISTS(‘/書籍情報[価格>=$PRICE]’ PASSING BY VALUE 書籍情報, :price AS PRICE)