# 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`表にて、`xcol`XML列の値を表示するには、次の文を書きます。

    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を使ったときにエラーが発生します。

親トピック: 組み込み関数