XMLSERIALIZE
XMLSERIALIZE 関数は、XML-expression 引数から生成される、指定のデータ・タイプの直列化された XML 値を戻します。
.-CONTENT-. >>-XMLSERIALIZE--(--+---------+--XML-expression--AS--| data-type |--> .--------------------------------------. V (1).-VERSION--'1.0'---------------. | >--------+------------------------------+-+--)----------------->< | .-EXCLUDING XMLDECLARATION-. | '-+-INCLUDING XMLDECLARATION-+-' data-type .-(--1--)-------. |--+-+-+-+-CHARACTER-+--+---------------+----------+--+----------------+---------------------+------------+--| | | | '-CHAR------' '-(--integer--)-' | +-FOR BIT DATA---+ | | | | '-+-+-CHARACTER-+--VARYING-+--(--integer--)-' +-FOR SBCS DATA--+ | | | | | '-CHAR------' | +-FOR MIXED DATA-+ | | | | '-VARCHAR----------------' '-ccsid-clause---' | | | | .-(--1M--)-------------. | | | '-----+-+-CHARACTER-+--LARGE OBJECT-+------+----------------------+--+----------------+-' | | | '-CHAR------' | '-(--integer--+---+--)-' +-FOR SBCS DATA--+ | | '-CLOB------------------------' +-K-+ +-FOR MIXED DATA-+ | | +-M-+ '-ccsid-clause---' | | '-G-' | | .-(--1--)-------. | +-+---GRAPHIC----+---------------+-------+--+--------------+-------------------------------------------+ | | '-(--integer--)-' | '-ccsid-clause-' | | +-+-GRAPHIC VARYING-+--(--integer--)---+ | | | '-VARGRAPHIC------' | | | | .-(--1M--)-------------. | | | '---DBCLOB----+----------------------+-' | | '-(--integer--+---+--)-' | | +-K-+ | | +-M-+ | | '-G-' | | .-(--1--)-------. | +-+-+-+-NATIONAL CHARACTER-+--+---------------+----------+---------------------+--+------------------+-+ | | | +-NATIONAL CHAR------+ '-(--integer--)-' | | '-normalize-clause-' | | | | '-NCHAR--------------' | | | | | '-+-+-NATIONAL CHARACTER-+--VARYING-+--(--integer--)-' | | | | | +-NATIONAL CHAR------+ | | | | | | '-NCHAR--------------' | | | | | '-NVARCHAR------------------------' | | | | .-(--1M--)-------------. | | | '-----+-+-NATIONAL CHARACTER-+--LARGE OBJECT-+------+----------------------+-' | | | '-NCHAR--------------' | '-(--integer--+---+--)-' | | '-NCLOB--------------------------------' +-K-+ | | +-M-+ | | '-G-' | | .-(--1--)-------. | '-+-+-BINARY--+---------------+---------+-----------------+--------------------------------------------' | | '-(--integer--)-' | | | '-+-BINARY VARYING-+--(--integer--)-' | | '-VARBINARY------' | | .-(--1M--)-------------. | '---+-BINARY LARGE OBJECT-+----+----------------------+-' '-BLOB----------------' '-(--integer--+---+--)-' +-K-+ +-M-+ '-G-'
注:
- 同じ文節を複数回指定することはできません。
ccsid-clause |--CCSID--integer--+------------------+-------------------------| '-normalize-clause-' normalize-clause .-NOT NORMALIZED-. |--+----------------+-------------------------------------------| '-NORMALIZED-----'
- CONTENT
- 任意の XML 値を指定できることを示し、直列化の結果はこの入力値に基づきます。
- XML-expression
- 組み込み XML ストリングの値を戻す式。これは、直列化処理への入力です。
- AS data-type
- 結果タイプを指定します。指定された結果のデータ・タイプの暗黙的または明示的な長さ属性は、直列化された出力を収容するのに十分な大きさでなければなりません。
CCSID が指定され、data-type が GRAPHIC、VARGRAPHIC、または DBCLOB の場合、CCSID は Unicode CCSID であることが必要です。
CCSID 属性が指定されないと、CCSID は CAST の指定に記されているように決定されます。
- VERSION '1.0'
- 直列化された値の XML バージョンを指定します。サポートされる唯一のバージョンは「1.0」で、これをストリング定数として指定する必要があります。
- EXCLUDING XMLDECLARATION または INCLUDING XMLDECLARATION
- XML 宣言を結果に含めるかどうかを指定します。デフォルトは EXCLUDING XMLDECLARATION です。
- EXCLUDING XMLDECLARATION
- XML 宣言を結果に含めないことを指定します。
- INCLUDING XMLDECLARATION
- XML 宣言を結果に含めることを指定します。 XML 宣言は、ストリング '<?xml version="1.0" encoding="encoding-name"?> で、 encoding-name は結果のデータ・タイプの CCSID と一致します。
XML 式 がヌルになる可能性がある場合は、結果もヌルになる可能性があります。XML 式 がヌルの場合は、結果は NULL 値になります。
例
例 1: XMLELEMENT 関数によって戻される XML 値 (エレメント名が「Emp」で、従業員名をエレメントの内容として持つ単純 XML エレメント) を直列化して UTF-8 の CLOB にします。
SELECT e.empno, XMLSERIALIZE(XMLELEMENT(NAME "Emp",
e.firstnme || ' ' ||e.lastname)
AS CLOB(100) CCSID 1208) AS "result"
FROM employee e WHERE e.lastname = 'SMITH'
結果は以下のようになります。 EMPNO result
----- ---------------------
000250 <Emp>DANIEL SMITH</Emp>
000300 <Emp>PHILIP SMITH</Emp>
例 2: XMLELEMENT 関数によって戻される XML 値を直列化して BLOB タイプのストリングにします。
SELECT XMLSERIALIZE(XMLELEMENT(NAME "Emp",
e.firstnme || ' ' ||e.lastname)
AS BLOB(1K)
VERSION '1.0') AS "result"
FROM employee e WHERE e.empno = '000300'
結果は以下のようになります。 result
---------------------
<Emp>PHILIP SMITH</Emp>
例 3: XMLELEMENT 関数によって戻される XML 値を直列化して CLOB タイプのストリングにします。XMLDECLARATION を以下のように組み込みます。
SELECT e.empno, e.firstnme, e.lastname,
XMLSERIALIZE(XMLELEMENT(NAME "xmp:Emp",
XMLNAMESPACES('http://www.xmp.com' as "xmp"),
XMLATTRIBUTES(e.empno as "serial"),
e.firstnme, e.lastname
OPTION NULL ON NULL)
AS CLOB(1000) CCSID 1208
INCLUDING XMLDECLARATION) AS "Result"
FROM employee e WHERE e.empno = '000300'
結果は以下のようになります。 EMPNO FIRSTNME LASTNAME 結果
------ --------- --------- -----------------------
000300 PHILIP SMITH <?xml version="1.0" encoding="UTF-8" ?>
<xmp:Emp xmlns:xmp="http://www.xmp.com"
serial="000300">PHILIPSMITH</xmp:Emp>