XMLSERIALIZEはXML型の情報を文字型の情報に変換するSQL/XML演算子です。これはDerby 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 文字情報型 )
SELECT ID,
XMLSERIALIZE(
xcol AS CLOB)
FROM x_table
JDBCを使ってこの結果を取り出すためには、JDBCのgetCharacterStream()やgetString()メソッドを使うことができます。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を使ったときにエラーが発生します。