XML 値

XML 値は、XML 文書、XML コンテンツ、または XML シーケンスの形式の適格な XML を表します。

XML データ・タイプで定義された列の値として表に格納される XML 値は、整形式 XML 文書でなければなりません。XML 値は、別の XML 値を含む、どのストリング値にも比較できない内部表記で処理されます。XML データ・タイプに適用できる唯一の述部は、IS NULL 述部です。

XML 値は、XML 文書を表す直列化されたストリング値に変換することができます。これを行うには、XMLSERIALIZE 関数を使用します。同様に、XML 文書を表すストリング値は、XML 値に変換することができます。これを行うには、XMLPARSE 関数を使用します。XML 値は、アプリケーションでストリングやバイナリーのデータ・タイプを変換する際に暗黙的に構文解析または直列化できます。

XML データ・タイプには、最大長は定義されていません。XML を表す直列化されたストリング値として扱われる場合は、有効な最大長に関する制約があります。その場合の限度は、LOB データ・タイプと同じです。LOB と同様、XML ロケーターと XML ファイルは変数を参照します。

XML 値を使用する場合の制約事項: いくつかの例外を除き、他のデータ・タイプを使用可能な同一コンテキストの中で XML 値を使用できます。XML 値は、以下において有効です。

  • パラメーター・マーカー、XML、または NULL から XML への CAST
  • パラメーター・マーカー、XML、または NULL から XML への XMLCAST
  • IS NULL 述部
  • COUNT および COUNT_BIG 集約関数
  • COALESCE、IFNULL、HEX、LENGTH、CONTAINS、および SCORE スカラー関数
  • XML スカラー関数
  • DISTINCT が指定されていない SELECT リスト
  • INSERT VALUES 文節、UPDATE SET 文節、および MERGE
  • SET および VALUES INTO
  • プロシージャー・パラメーター
  • ユーザー定義関数の引数および結果
  • トリガー相関変数
  • 動的準備済みステートメントのパラメーター・マーカー値

XML 値は、以下の箇所では直接使用できません。 XMLSERIALIZE の引数など、式が使用できる場所では XML 値も使用できます。

  • DISTINCT キーワードが含まれる SELECT リスト
  • GROUP BY 文節
  • ORDER BY 文節
  • UNION ALL ではない全選択の副選択
  • 基本述部、多値比較述部、BETWEEN、DISTINCT、IN、または LIKE 述部
  • DISTINCT キーワードが指定された集約関数
  • 主キー、ユニーク・キー、または外部キー
  • チェック制約
  • 索引列

XML データ・タイプの組み込みデータ・タイプを持つホスト言語はありません。

XML データ・モデルおよび XML 値について は、SQL XML プログラミングを参照してください。

XML の CCSID の決定

XML データは、任意の 1 バイトの EBCDIC、混合 CCSID、または Unicode CCSID 1208、1200、13488 を使用して定義できます。XML データの CCSID として、65535 は使用できません。CCSID は、XML データ・タイプを定義する際に明示的に指定できます。明示的に指定しない場合、SQL_XML_DATA_CCSID QAQQINI ファイル・オプションの値を使用して、CCSID が割り当てられます。この値が設定されないと、デフォルトは 1208 (UTF-8) です。

ステートメントが実行されると、SQL スキーマ・ステートメントで使用される XML データ・タイプの CCSID が設定されます。

CCSID を割り当てる DECLARE VARIABLE がない XML ホスト変数の場合、以下のようにして CCSID が割り当てられます。
  • XML AS DBCLOB の場合、CCSID は 1200 です。
  • XML AS CLOB および SQL_XML_DATA_CCSID QAQQINI 値が 1200 または 13488 の場合、CCSID は 1208 になります。
  • その他の場合、SQL_XML_DATA_CCSID QAQQINI 値が CCSID として使用されます。

暗黙的であれ明示的であれすべての XMLPARSE 関数は UTF-8 (1208) を使用して実行されるので、この CCSID でデータを定義するとデータを UTF-8 に変換する必要がなくなります。