XMLSERIALIZE 演算子

XMLSERIALIZEはXML型の情報を文字型の情報に変換するSQL/XML演算子です。これはDerby XML値を変換する唯一の方法です。

重要: 直列化はSQL/XMLの直列化規則に沿います。 DerbyはXMLSERIALIZEの構文の一部しかサポートしないこともあいまって、XMLSERIALIZE演算子の結果が元のXMLと全く同じであることは保障されせん。 例えば、[xString]が整形式のXML文書を表す文字表現であるとして、次の文が発行されたとします。
INSERT INTO x_table (id, xcol)
    VALUES (3, XMLPARSE(DOCUMENT '[xString]' PRESERVE WHITESPACE));

SELECT id, XMLSERIALIZE(xcol AS VARCHAR(100))
    FROM x_table WHERE id = 3;

このときXMLSERIALIZE演算子の結果が、元の[xString]の値と同じである保障はありません。 XMLSERIALIZEの処理にてSQL/XMLの仕様に沿って何らかの変更が起きる可能性があります。 XMLSERIALIZEの結果が元の文字表現と同じであることもありますが、同じであることは保障されません。

問合せの最上位の結果セットにXMLSERIALIZE演算子が書かれた場合、XMLSERIALIZEにて文字情報型引数で指定した型に適用できるJDBCの全てのgetXXXメソッドによって結果を得ることができます。XMLSERIALIZE演算子を使わずにXMLの値を最上位の結果セットで取得しようとすると、Derbyはエラーを挙げます。 DerbyはXML値を暗黙裡に直列化しません。

構文

XMLSERIALIZE ( xml値式 AS 文字情報型 )
xml値式
あらゆるDerby XML値を取ることができます。XMLQUERYによる結果のXMLの結果の並びでもかまいません。xml値式にパラメータを指定することはできません。

文字情報型
CHAR、VARCHAR、LONG VARCHARあるいはCLOB等の、SQLの文字列型を指定しなければなりません。 有効な文字列型が指定されなかった場合、Derbyはエラーを挙げます。

x_table表にて、xcolXML列の値を表示するには、次の文を書きます。
SELECT ID, 
    XMLSERIALIZE(
    xcol AS CLOB) 
FROM x_table
JDBCを使ってこの結果を取り出すためには、JDBCのgetCharacterStream()やgetString()メソッドを使うことができます。
XMLQUERY演算子の結果を表示するには、次の文を書きます。
SELECT ID, 
    XMLSERIALIZE(
        XMLQUERY('//student[@age>20]' 
           PASSING BY REF xcol EMPTY ON EMPTY)
    AS VARCHAR(50))
FROM x_table

利用上の覚書

DerbyにてXML機能が動作するには、Apache XercesのようなJAXP構文解析器とApache XalanがJavaのクラスパスに記述されている必要があります。クラスパスに記述がなかった場合、XMLSERIALIZEを使ったときにエラーが発生します。