XMLELEMENT

構文

XML_attributes_clause::=

目的

XMLElementは、identifierに対する要素名を取るか、またはEVALNAME value_exprの要素名、要素に対する属性のオプションのコレクション、およびその要素の内容を構成する引数を評価します。このファンクションはXMLType型のインスタンスを戻します。XMLElementは、戻されたXMLに属性を格納できる点を除いてSYS_XMLGenに似ていますが、XMLFormatオブジェクトを使用した書式設定は受け入れません。

次の項に示すとおり、通常は、XMLELEMENTファンクションはネストされており、ネスト構造のXML文書を生成します。

ENTITYESCAPINGおよびNONENTITYESCAPINGキーワードについては、『Oracle XML DB開発者ガイド』を参照してください。

囲みタグに使用するOracle Databaseの値を指定する必要があります。この場合、文字列リテラルのidentifierを指定するか、またはEVALNAME value_exprを指定します。後者の場合は、値の式が評価され、その結果(文字列リテラル)が識別子として使用されます。この識別子は、列名または列の参照である必要はありません。式またはNULLは指定できません。初期化パラメータがMAX_STRING_SIZE = STANDARDの場合は最大4,000文字になります。また、MAX_STRING_SIZE = EXTENDEDの場合は最大32,767文字になります。

要素の内容を構成するオブジェクトは、XMLATTRIBUTESキーワードの後に指定します。XML_attributes_clauseでは、value_exprがNULLの場合、その値の式に対する属性は作成されません。value_exprの型に、オブジェクト型またはコレクションは指定できません。AS句を使用してvalue_exprに別名を指定すると、c_aliasまたは評価された値の式(EVALNAME value_expr)は、初期化パラメータがMAX_STRING_SIZE = STANDARDの場合は最大4,000文字まで指定可能になります。また、MAX_STRING_SIZE = EXTENDEDの場合は最大32,767文字まで指定可能になります。

関連項目:

MAX_STRING_SIZEの詳細は、「拡張データ型」を参照してください。

構文図のXML_attributes_clauseに続くオプションのvalue_exprは、次のようになります。

  • value_exprがスカラー式である場合、AS句は省略できます。この場合、Oracleは列名を要素名として使用します。

  • value_exprがオブジェクト型またはコレクションである場合、AS句は必須です。この場合、Oracleは指定されたc_aliasを囲みタグとして使用します。

  • value_exprがNULLの場合、その値の式に対する要素は作成されません。

    関連項目:

    SYS_XMLGEN

次の例では、一連の従業員について、従業員の名前と雇用日を指定する、ネストされた要素を持つEmp要素を生成します。

SELECT XMLELEMENT("Emp", XMLELEMENT("Name", 
   e.job_id||' '||e.last_name),
   XMLELEMENT("Hiredate", e.hire_date)) as "Result"
   FROM employees e WHERE employee_id > 200;

Result
-------------------------------------------------------------------
<Emp>
  <Name>MK_MAN Hartstein</Name>
  <Hiredate>2004-02-17</Hiredate>
</Emp>
 
<Emp>
  <Name>MK_REP Fay</Name>
  <Hiredate>2005-08-17</Hiredate>
</Emp>
 
<Emp>
  <Name>HR_REP Mavris</Name>
  <Hiredate>2002-06-07</Hiredate>
</Emp>
 
<Emp>
  <Name>PR_REP Baer</Name>
  <Hiredate>2002-06-07</Hiredate>
</Emp>
 
<Emp>
  <Name>AC_MGR Higgins</Name>
  <Hiredate>2002-06-07</Hiredate>
</Emp>
 
<Emp>
  <Name>AC_ACCOUNT Gietz</Name>
  <Hiredate>2002-06-07</Hiredate>
</Emp>

6 rows selected.

次の例では、XMLELEMENTファンクションにXML_attributes_clauseを使用して、トップレベル要素に対する属性値を持つ、ネストされたXML要素を作成します。

SELECT XMLELEMENT("Emp",
      XMLATTRIBUTES(e.employee_id AS "ID", e.last_name),
      XMLELEMENT("Dept", e.department_id),
      XMLELEMENT("Salary", e.salary)) AS "Emp Element"
   FROM employees e
   WHERE e.employee_id = 206;

Emp Element
---------------------------------------------------------------
<Emp ID="206" LAST_NAME="Gietz">
  <Dept>110</Dept>
  <Salary>8300</Salary>
</Emp>

last_nameにはAS identifier句が指定されていません。その結果、戻されたXMLは、デフォルトで列名last_nameを使用します。

最後に、次の例では、XML_attributes_clauseに副問合せを使用して、別の表から要素の属性に情報を取り出します。

SELECT XMLELEMENT("Emp", XMLATTRIBUTES(e.employee_id, e.last_name),
   XMLELEMENT("Dept", XMLATTRIBUTES(e.department_id,
   (SELECT d.department_name FROM departments d
   WHERE d.department_id = e.department_id) as "Dept_name")),
   XMLELEMENT("salary", e.salary),
   XMLELEMENT("Hiredate", e.hire_date)) AS "Emp Element"
   FROM employees e
   WHERE employee_id = 205;

Emp Element
-------------------------------------------------------------------
<Emp EMPLOYEE_ID="205" LAST_NAME="Higgins">
  <Dept DEPARTMENT_ID="110" Dept_name="Accounting"/>
  <salary>12008</salary>
  <Hiredate>2002-06-07</Hiredate>
</Emp>