XMLTABLE

構文

XMLnamespaces_clause::=

ノート:

DEFAULT string句を1つのみ指定できます。

XMLTABLE_options::=

XML_passing_clause::=

XML_table_column::=

目的

XMLTableは、XQueryの評価結果をリレーショナル行および列にマップします。SQLを使用して、このファンクションで戻される結果を仮想リレーショナル表として問い合せることができます。

  • XMLNAMESPACES句には、XMLネームスペースの宣言が含まれます。これらの宣言は、XQuery式(評価されたXQuery_string)と、XML_table_columnPATH句のXPath式で参照されます。XQuery式は行を計算し、XPath式はXMLTableファンクション全体の列を計算します。COLUMNS句のPATH式に修飾名を使用する場合は、XMLNAMESPACES句を指定する必要があります。

  • XQuery_stringはリテラル文字列です。この文字列は完全なXQuery式であり、プロローグ文字を含むことができます。XQuery_stringの値はXMLTableファンクションへの入力となります。つまり、このXQueryの結果は分解されてリレーショナル・データとして格納されます。

  • XML_passing_clauseexprは、XMLTypeまたはSQLスカラー・データ型のインスタンスを戻し、XQuery式を評価するためのコンテキストとして使用されます。PASSING句には、識別子を指定せずに1つのexprのみを指定できます。各exprの評価結果は、XQuery_stringの対応する識別子にバインドされます。exprの後にAS句が続かない場合、式の評価結果はXQuery_stringの評価用のコンテキスト項目として使用されます。この句がサポートするのは値渡しのみで、参照渡しはサポートしません。したがって、BY VALUEキーワードはオプションであり、意味を明確にするためのものです。

  • オプションのRETURNING SEQUENCE BY REF句を指定すると、XQuery評価の結果が参照で戻されます。したがって、XML_table_column句の中でソース・データの任意の部分を参照できます。

    この句を指定しないと、XQuery評価の結果は値で戻されます。つまり、実際のノードへの参照のかわりに、ターゲット・ノードのコピーが戻されます。この場合、XML_table_column句では戻されたコピーの中に含まれないデータを参照できません。特に、ソース・データ内でターゲット・ノードより前にあるデータは参照できません。

  • オプションのCOLUMNS句は、XMLTableにより作成される仮想表の列を定義します。

    • COLUMNS句を指定しない場合、XMLTableは、COLUMN_VALUEという名前の単一のXMLType疑似列を戻します。

    • FOR ORDINALITYは、columnが生成された行番号の列になるように指定します。FOR ORDINALITY句は、最大で1つにする必要があります。これは、NUMBER列として作成されます。

    • FOR ORDINALITY列以外の作成される各列について、列のデータ型を指定する必要があります。XMLTypeまたは他の任意のデータ型を指定できます。

      列のデータ型がXMLTypeの場合は、XMLTYPE句を指定します。オプションの(SEQUENCE) BY REF句を指定すると、PATH式のターゲットとなっているソース・データへの参照が列の内容として戻されます。それ以外の場合、columnにはそのターゲット・データのコピーが含まれます。

      XMLTypeデータを参照で戻すことにより、列のPATH式のターゲットの外にあるソース・データ内のノードをターゲットとするパスを持つ他の列を指定できるようになります。

      列のデータ型がそれ以外のデータ型の場合は、datatypeを指定します。

    • オプションのPATH句では、XQuery式の文字列でアドレス指定されるXQuery結果の部分を列の内容として使用するように指定します。

      PATHを指定しない場合、XQuery式のcolumnとみなされます。次に例を示します。

      XMLTable(... COLUMNS xyz)
      

      これは、次の式と同じです。

      XMLTable(... COLUMNS xyz PATH 'XYZ')
      

      異なるPATH句を使用すると、XQuery結果を異なる仮想表の列に分割できます。

    • オプションのDEFAULT句では、PATH式の結果が空の順序の場合に使用する値を指定します。exprは、デフォルト値の生成用に評価するXQuery式です。

関連項目:

次の例では、warehouses表のwarehouse_spec列の各値にXQuery '/Warehouse'を適用した結果を、列WaterおよびRailのある仮想リレーショナル表に変換します。

SELECT warehouse_name warehouse,
   warehouse2."Water", warehouse2."Rail"
   FROM warehouses,
   XMLTABLE('/Warehouse'
      PASSING warehouses.warehouse_spec
      COLUMNS 
         "Water" varchar2(6) PATH 'WaterAccess',
         "Rail" varchar2(6) PATH 'RailAccess') 
      warehouse2;

WAREHOUSE                           Water  Rail
----------------------------------- ------ ------
Southlake, Texas                    Y      N
San Francisco                       Y      N
New Jersey                          N      N
Seattle, Washington                 N      Y