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_tableJDBCを使ってこの結果を取り出すためには、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を使ったときにエラーが発生します。