XMLQUERYはSQLにてXMLの値を問い合わせることができるSQL/XML演算子です。
XMLQUERY演算子には二つの引数があります。片方はXML問合せ式で、もう一つはDerbyXML値です。
XMLQUERY ( xquery文字列リテラル PASSING BY REF xml値式 [ RETURNING SEQUENCE [ BY REF ] ] EMPTY ON EMPTY )
XMLQUERY演算子の結果は、XML型の値です。 結果はXMLノードや値の並びを表します。文字列のような値は、結果の並びの一部となることができます。XMLQUERY演算子の結果は整形式のXML文書であることが保障されず、XML列にXMLQUERY演算子の結果を挿入できないことがあります。 XML列に結果を記録するためには、その結果は唯一つの項目を持つ並びで、その項目が整形式の文書ノードでなければなりません。 結果はXMLSERIALIZE 演算子によって直列化することによってのみ見られるようにできます。
SELECT ID, XMLSERIALIZE( XMLQUERY('//student[@age>20]' PASSING BY REF xcol EMPTY ON EMPTY) AS VARCHAR(50)) FROM x_tableこの問合せでは、XMLQUERY演算子が実際に結果を返すか否かにかかわらず、結果にはx_tableの全行毎に結果行があります。
SELECT ID, XMLSERIALIZE( XMLQUERY('string(//student[text() = "BC"]/@age)' PASSING BY REF xcol EMPTY ON EMPTY) AS VARCHAR(50)) FROM x_table WHERE XMLEXISTS('//student[text() = "BC"]' PASSING BY REF xcol)この問合せでは結果には、x_table中のBCという名前の生徒の行のみあります。
DerbyはXMLの機能を動作させるために、Apache XercesのようなJAXP構文解析器とApache XalanがJavaのクラスパスに記述されている必要があります。JAXP構文解析器、Xalanの何れかがクラスパスに記述されていない場合に、XMLQUERY演算子を利用しようとするとエラーが発生します。