3.5.9. XML 関数


XML 関数は、XML データを操作する機能を提供します。詳細は、「JSON 関数JSONTOXML 」を参照してください。

サンプル用のデータのサンプル

XML 関数で提供される例では、以下の表構造を使用します。

TABLE  Customer (
    CustomerId integer PRIMARY KEY,
    CustomerName varchar(25),
    ContactName varchar(25)
    Address varchar(50),
    City varchar(25),
    PostalCode varchar(25),
    Country varchar(25),
);
Copy to Clipboard Toggle word wrap

データを使用

Expand
customeridCustomerNameContactNameアドレスCityPostalCode

87

Wartian Herku

Pirkko Koskitalo

Torikatu 38

Oulu

90110

フィンランド

88

Wellington Importadora

親の親

Rua do Mercado, 12

Resende

08737-363

ブラジル

89

white CloverMarks

karl Jablonski

305 - 14th Ave.S. Suite 3B

Seattle

98128

USA

XMLCAST

XML へ/からキャストします。

XMLCAST(expression AS type)
Copy to Clipboard Toggle word wrap

式または型は XML である必要があります。戻り値は、型として 入力 されます。これは、XMLTABLE が必要なランタイムタイプに値を変換するために使用する機能と同じですが、XMLCAST は配列型のターゲットとは機能しません。

XMLCOMMENT

XML コメントを返します。

XMLCOMMENT(comment)
Copy to Clipboard Toggle word wrap

comment は文字列です。戻り値は XML です。

XMLCONCAT

指定の XML 型を連結した XML を返します。

XMLCONCAT(content [, content]*)
Copy to Clipboard Toggle word wrap

コンテンツは XML です。戻り値は XML です。

値が null の場合は無視されます。すべての値が null の場合は、null を返します。

2 つ以上の XML フラグメントを連結します。

SELECT XMLCONCAT(
         XMLELEMENT("name", CustomerName),
         XMLPARSE(CONTENT '<a>b</a>' WELLFORMED)
       )
FROM   Customer c
WHERE  c.CustomerID = 87;

==========================================================
<name>Wartian Herkku</name><a>b</a>
Copy to Clipboard Toggle word wrap

XMLELEMENT

指定の名前と内容を含む XML 要素を返します。

XMLELEMENT([NAME] name [, <NSP>] [, <ATTR>][, content]*)

ATTR:=XMLATTRIBUTES(exp [AS name] [, exp [AS name]]*)

NSP:=XMLNAMESPACES((uri AS prefix | DEFAULT uri | NO DEFAULT))+
Copy to Clipboard Toggle word wrap

コンテンツの値が XML 以外のタイプの場合は、親要素に追加されるときにエスケープされます。Null コンテンツの値は無視されます。XML またはコンテンツの文字列値の空白は保持されますが、コンテンツ値の間には空白は追加されません。

XMLNAMESPACES は namespace 情報を提供します。NO DEFAULT は、デフォルトの名前空間を null uri - xmlns="" と同等です。DEFAULT または DEFAULT の名前空間項目を 1 つだけ指定できます。名前空間の接頭辞 xmlns と xml は予約されています。

属性名が指定されていない場合は、式が列参照である必要があります。その場合、属性名は列名になります。null 属性値は無視されます。

name、prefix は識別子です。uri は文字列リテラルです。コンテンツはどのタイプでも指定できます。戻り値は XML です。戻り値はドキュメントが想定される場所での使用に有効です。

簡単な例

SELECT XMLELEMENT("name", CustomerName)
FROM   Customer c
WHERE  c.CustomerID = 87;

==========================================================
<name>Wartian Herkku</name>
Copy to Clipboard Toggle word wrap

複数の列

SELECT XMLELEMENT("customer",
          XMLELEMENT("name", c.CustomerName),
          XMLELEMENT("contact", c.ContactName))
FROM   Customer c
WHERE  c.CustomerID = 87;

==========================================================
<customer><name>Wartian Herkku</name><contact>Pirkko Koskitalo</contact></customer>
Copy to Clipboard Toggle word wrap

属性としての列

SELECT XMLELEMENT("customer",
          XMLELEMENT("name", c.CustomerName,
            XMLATTRIBUTES(
                  "contact" as c.ContactName,
                  "id" as c.CustomerID
            )
          )
       )
FROM   Customer c
WHERE  c.CustomerID = 87;

==========================================================
<customer><name contact="Pirkko Koskitalo" id="87">Wartian Herkku</name></customer>
Copy to Clipboard Toggle word wrap

XMLFOREST

各コンテンツアイテムの XML 要素の連結を返します。

XMLFOREST(content [AS name] [, <NSP>] [, content [AS name]]*)
Copy to Clipboard Toggle word wrap

NSP - XMLNAMESPACES の定義については、「XML 関数XMLELEMENT 」を参照してください。

name は識別子です。コンテンツには任意のタイプを指定できます。戻り値は XML です。

コンテンツアイテムに名前が指定されていない場合は、式が列参照である必要があります。この場合、要素名は部分的にエスケープされた列名のバージョンになります。

XMLFOREST を使用して、複数の XMLELEMENTS の宣言を簡素化できます。XMLFOREST 関数を使用すると、一度に複数の列を処理できます。

SELECT XMLELEMENT("customer",
          XMLFOREST(
             c.CustomerName AS "name",
             c.ContactName AS "contact"
          ))
FROM   Customer c
WHERE  c.CustomerID = 87;

==========================================================
<customer><name>Wartian Herkku</name><contact>Pirkko Koskitalo</contact></customer>
Copy to Clipboard Toggle word wrap

XMLAGG

XMLAGG は XML 要素のコレクションを取得し、集約された XML ドキュメントを返す集約関数です。

XMLAGG(xml)
Copy to Clipboard Toggle word wrap

上記の例の XML 要素では、条件に一致する行が複数ある場合に、カスタマーテーブルの各行が XML の行を生成します。有効な XML を生成しますが、root 要素がないため、適切に形成されません。XMLAGG を使用して修正できます。

SELECT XMLELEMENT("customers",
         XMLAGG(
           XMLELEMENT("customer",
             XMLFOREST(
               c.CustomerName AS "name",
               c.ContactName AS "contact"
             )))
FROM   Customer c


==========================================================
<customers>
<customer><name>Wartian Herkku</name><contact>Pirkko Koskitalo</contact></customer>
<customer><name>Wellington Importadora</name><contact>Paula Parente</contact></customer>
<customer><name>White Clover Markets</name><contact>Karl Jablonski</contact></customer>
</customers>
Copy to Clipboard Toggle word wrap

XMLPARSE

文字列値式の XML 型表現を返します。

XMLPARSE((DOCUMENT|CONTENT) expr [WELLFORMED])
Copy to Clipboard Toggle word wrap

{string, clob, blob, varbinary} の expr戻り値は XML です。

DOCUMENT が指定されている場合、式には単一のルート要素が必要であり、XML 宣言が含まれる場合とそうでない場合があります。

WELLFORMED を指定すると検証は省略されます。これは、すでに有効なことが認識される CLOB および BLOB に特に便利です。

SELECT XMLPARSE(CONTENT '<customer><name>Wartian Herkku</name><contact>Pirkko Koskitalo</contact></customer>' WELLFORMED);

Will return a SQLXML with contents
===============================================================
<customer><name>Wartian Herkku</name><contact>Pirkko Koskitalo</contact></customer>
Copy to Clipboard Toggle word wrap

XMLPI

XML 処理命令を返します。

XMLPI([NAME] name [, content])
Copy to Clipboard Toggle word wrap

name は識別子です。Content は文字列です。戻り値は XML です。

XMLQUERY

指定の xquery を評価する XML 結果を返します。

XMLQUERY([<NSP>] xquery [<PASSING>] [(NULL|EMPTY) ON EMPTY]]

PASSING:=PASSING exp [AS name] [, exp [AS name]]*
Copy to Clipboard Toggle word wrap

NSP - XMLNAMESPACES の定義については、「 XMLELEMENT in XML 関数 」を参照してください。

また、名前空間は xquery Prolog で直接宣言することもできます。

オプションの PASSING 句は、名前のないコンテキスト項目と、グローバル変数値という名前を提供するために使用されます。xquery がコンテキスト項目を使用し、指定がない場合は例外が発生します。指定できるのは 1 つのコンテキスト項目のみで、XML 型でなければなりません。コンテキスト以外の XML 以外のパス値はすべて適切な XML 型に変換されます。コンテキストアイテムが null と評価されると、null が返されます。

ON EMPTY 句は、評価シーケンスが空の場合に結果を指定するために使用されます。デフォルトである EMPTY ON EMPTY は、空の XML 結果を返します。NULL ON EMPTY は null 結果を返します。

XQuery(文字列)。戻り値は XML です。

XMLQUERY は SQL/XML の検出仕様の一部です。

詳細は、「XMLTABLE in FROM clause 」を参照してください。

注記

XQuery の最適化 」も参照してください。

XMLEXISTS

指定の xquery を評価して空でないシーケンスが返されると true を返します。

XMLEXISTS([<NSP>] xquery [<PASSING>]]

PASSING:=PASSING exp [AS name] [, exp [AS name]]*
Copy to Clipboard Toggle word wrap

NSP - XMLNAMESPACES の定義については、「 XMLELEMENT in XML 関数 」を参照してください。

また、名前空間は xquery Prolog で直接宣言することもできます。

オプションの PASSING 句は、名前のないコンテキスト項目と、グローバル変数値という名前を提供するために使用されます。xquery がコンテキスト項目を使用し、指定がない場合は例外が発生します。指定できるのは 1 つのコンテキスト項目のみで、XML 型でなければなりません。コンテキスト以外の XML 以外のパス値はすべて適切な XML 型に変換されます。コンテキストアイテムが null と評価されると、null/Unknown が返されます。

XQuery(文字列)。戻り値はブール値です。

XMLEXISTS は SQL/XML Hadoop 仕様の一部です。

注記

XQuery の最適化 」も参照してください。

XMLSERIALIZE

XML 式の文字型表現を返します。

XMLSERIALIZE([(DOCUMENT|CONTENT)] xml [AS datatype] [ENCODING enc] [VERSION ver] [(INCLUDING|EXCLUDING) XMLDECLARATION])
Copy to Clipboard Toggle word wrap

戻り値はデータタイプと一致します。 データタイプが指定されていない場合、clob が想定されます。

タイプは文字(string、varchar、clob)またはバイナリー(blob、varbinar)にすることができます。CONTENT がデフォルトです。DOCUMENT を指定し、XML が有効なドキュメントまたはフラグメントでない場合は、例外が発生します。

エンコーディングの暗号は識別子として指定されます。文字のシリアライズではエンコーディングを指定できません。  version ver は文字列リテラルとして指定されます。特定の XMLDECLARATION が指定されていない場合は、UTF-8/UTF-16 またはバージョン 1.0 以外のドキュメントシリアライゼーションを実行する場合や、基礎となる XML に宣言がある場合のみ宣言が含まれます。  CONTENT がシリアライズされる場合は、値がドキュメントまたは要素でない場合に宣言は省略されます。

FE FF および XML 宣言の適切なバイト順序マークを含む、UTF-16 に XML の BLOB を生成する以下の例を参照してください。

バイナリーシリアライゼーションの例

XMLSERIALIZE(DOCUMENT value AS BLOB ENCODING "UTF-16" INCLUDING XMLDECLARATION)
Copy to Clipboard Toggle word wrap

XMLTEXT

XML テキストを返します。

XMLTEXT(text)
Copy to Clipboard Toggle word wrap

text は文字列です。戻り値は XML です。

XSLTRANSFORM

XSL スタイルシートを指定されたドキュメントに適用します。

XSLTRANSFORM(doc, xsl)
Copy to Clipboard Toggle word wrap

doc, XSL in {string, clob, xml}戻り値は clob です。

いずれの引数も null の場合、結果は null になります。

XPATHVALUE

XPATH 式をドキュメントに適用し、最初に一致した結果の文字列値を返します。結果および XQuery をより制御するには、XMLQUERY 関数を使用します。詳細は「XML 関数XMLQUERY 」を参照してください。

XPATHVALUE(doc, xpath)
Copy to Clipboard Toggle word wrap

{string, clob, blob, xml}. xpath のドキュメントは文字列です。戻り値は文字列です。

テキスト以外のノードと一致すると、依然としてすべての子テキストノードを含む文字列の結果が生成されます。単一要素が xsi:nil でマークされた場合は、null を返します。

入力ドキュメントで名前空間を使用する場合は、名前空間を無視する XPATH を指定する必要がある場合があります。

xpathValue Ignoring Namespaces のサンプル XML

<?xml version="1.0" ?>
  <ns1:return xmlns:ns1="http://com.test.ws/exampleWebService">Hello<x> World</x></return>
Copy to Clipboard Toggle word wrap

関数:

xpathValue Ignoring Namespaces のサンプル

xpathValue(value, '/*[local-name()="return"]')
Copy to Clipboard Toggle word wrap

Hello Worldの結果

例: フラットデータ構造からの階層 XML の生成

以下の表とそのコンテンツを使用

Table {
 x string,
 y integer
}
Copy to Clipboard Toggle word wrap

以下のような XML を生成する場合は ['a', 1], ['a', 2], ['b', 3], ['b', 4] などのデータ

<root>
   <x>
       a
       <y>1</y>
       <y>2</y>
   </x>
   <x>
       b
       <y>3</y>
       <y>4</y>
   </x>
</root>
Copy to Clipboard Toggle word wrap

以下のように Data Virtualization の SQL ステートメントを使用します。

select xmlelement(name "root", xmlagg(p))
   from (select xmlelement(name "x", x, xmlagg(xmlelement(name "y", y)) as p from tbl group by x)) as v
Copy to Clipboard Toggle word wrap

その他の例は、http://oracle-base.com/articles/misc/sqlxml-sqlx-generating-xml-content-using-sql.phpを参照してください。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat