説明
この関数は、XPathで返された結果をリレーショナルテーブルの行と列にマッピングします。SQLクエリ関数が返す結果を仮想リレーショナルテーブルとして使用できます。
XMLTABLE機能の主な特長は以下の通りです:
データ抽出:
XMLTABLEで適切なXPath式を指定することで、複雑なXMLドキュメントから必要なデータ部分を正確に抽出できます。データの構造化:
XMLTABLEは、XMLデータの特定部分をリレーショナルテーブルの行と列にマッピングし、半構造化されたXMLデータを構造化されたテーブル形式に変換します。これにより、SQLクエリや分析が容易になります。テーブル変換:
XMLTABLEで生成された構造化データを利用して仮想テーブルを作成でき、これらのテーブルデータを用いて新しいテーブルやビューを生成し、データベース内に保存したり、さらに処理を加えたりすることが可能です。
構文
XMLTABLE( [ XMLnamespaces_clause , ] XQuery_string XMLTABLE_options )
XMLnamespaces_clause:
XMLNAMESPACES( { string AS identifier } | { DEFAULT string } [, { string AS identifier } | { DEFAULT string } ]...)
XMLTABLE_options:
[ XML_passing_clause ]
[ COLUMNS XML_table_column [, XML_table_column]...]
XML_passing_clause:
PASSING [ BY VALUE ] expr [ AS identifier ]
XML_table_column:
column { FOR ORDINALITY
| { datatype | XMLTYPE } [ PATH string ] [ DEFAULT expr ]
}
パラメータの説明
フィールド |
説明 |
|---|---|
| XMLnamespaces_clause | 名前空間プレフィックスとURIを定義し、XMLクエリ内で名前空間を持つ要素や属性を参照するために使用します。この句には一連のXML名前空間宣言が含まれ、これらの宣言はXML_table_columnのPATH句内のXPath式によって参照されます。このXPath式は、XMLTable関数全体の列を計算します。COLUMNS句のPATH式で限定名を使用したい場合は、この句を指定する必要があります。 |
| XQuery_string | XQuery式を指定し、XMLデータから変換が必要なデータを選択します。XQueryは、XMLドキュメントからデータを抽出し、複雑なクエリ操作を実現するためのXMLクエリ言語です。このパラメータを使用すると、XQuery構文でXMLデータから抽出する要素や属性を定義する指示を記述できます。
注意OceanBaseデータベースの現在のバージョンは、XQueryをサポートしていません。 |
| XML_passing_clause | PASSINGキーワードを使用して、XQueryに渡すXMLデータを指定します。値渡しとデータのエイリアスを指定することができます。詳細は以下の通りです:
|
| COLUMNS | オプションのCOLUMNS句は、XMLTableが作成する仮想テーブルの列を定義します。COLUMNS句を省略した場合、XMLTableはCOLUMN_VALUEという名前の単一のXMLType疑似列を持つ行を返します。 |
| XML_table_column | 生成するテーブル列を定義します。通常のデータ型列またはXMLTYPE列にすることができます。列値のXPathパスとデフォルト値も指定できます。FOR ORDINALITYは行番号の生成に使用されます。詳細は以下のとおりです:
|
戻り値の型
戻り値のデータ型は、XMLTable関数で指定された列のデータ型に依存します。
例
XMLTABLE 関数を使用して、従業員のID、氏名、職位、給与を含むSQLテーブルにXMLデータを変換します。具体的な手順は以下のとおりです:
デフォルトの名前空間を
http://www.example.com/employeesと定義し、XMLデータ内の名前空間とマッチさせます。XQuery式を
'/employees/employee'と定義して、すべての従業員(employee)要素を選択します。PASSING句を使用して、XQuery式に渡すXMLドキュメントを指定します。この例では、XMLドキュメント全体がXMLTYPEコンストラクタでカプセル化されています。XMLTYPEは、文字列形式のXMLデータをデータベースが処理できるXML型に変換します。COLUMNS句で、XMLから抽出するデータをマッピングする4列を定義します。対応関係は以下のとおりです:employee_id列は、各employee要素のemp_idにマッピングされます。employee_name列は、各employee要素のnameにマッピングされます。position列は、各employee要素のpositionにマッピングされます。salary列は、各employee要素のsalaryにマッピングされます。
各列の後のPATH句は、対応する値を抽出する場所を定義します。
SELECT *
FROM XMLTABLE(
XMLNAMESPACES(DEFAULT 'http://www.example.com/employees'),
'/employees/employee'
PASSING XMLTYPE('
<employees xmlns="http://www.example.com/employees">
<employee>
<emp_id>1</emp_id>
<name>John Doe</name>
<position>Developer</position>
<salary>5000</salary>
</employee>
<employee>
<emp_id>2</emp_id>
<name>Jane Smith</name>
<position>Manager</position>
<salary>6500</salary>
</employee>
</employees>'
)
COLUMNS
employee_id INT PATH 'emp_id',
employee_name VARCHAR2(100) PATH 'name',
position VARCHAR2(50) PATH 'position',
salary NUMBER PATH 'salary'
) AS emp_tab;
結果は次のとおりです:
+-------------+---------------+-----------+--------+
| EMPLOYEE_ID | EMPLOYEE_NAME | POSITION | SALARY |
+-------------+---------------+-----------+--------+
| 1 | John Doe | Developer | 5000 |
| 2 | Jane Smith | Manager | 6500 |
+-------------+---------------+-----------+--------+
2 rows in set