説明
この関数は、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 | XMLクエリ内でネームスペースを持つ要素や属性を参照するために、ネームスペースのプレフィックスとURIを定義します。この句には一連のXMLネームスペース宣言が含まれており、これらの宣言はXML_table_columnのPATH句に記述されたXPath式によって参照されます。このXPath式は、XMLTable関数全体の列を計算します。COLUMNS句のPATH式で限定名を使用したい場合は、この句を指定する必要があります。 |
| XQuery_string | XMLデータから変換するデータを選択するためのXQuery式を指定します。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