Hitachi

ノンストップデータベース HiRDB Version 10 SQLリファレンス


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シーケンスである値を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) 規則

  1. この述語は,WHERE句にだけ指定できます。

  2. 副問合せ中には指定できません。

(f) 使用例

書籍情報列に,書籍管理表から埋込み変数(price)で指定された値以上の価格である書籍情報が格納された行の書籍ID列の値を取得します。

  SELECT 書籍ID FROM 書籍管理表
    WHERE XMLEXISTS(‘/書籍情報[価格>=$PRICE]’
                    PASSING BY VALUE 書籍情報,
                    :price AS PRICE)