構文

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を指定します。後者の場合は、値の式が評価され、その結果(文字列リテラル)が識別子として使用されます。この識別子は、最大4000文字まで指定可能で、列名または列の参照である必要はありません。式またはNULLは指定できません。
要素の内容を構成するオブジェクトは、XMLATTRIBUTESキーワードの後に指定します。XML_attributes_clauseでは、value_exprがNULLの場合、その値の式に対する属性は作成されません。value_exprの型に、オブジェクト型またはコレクションは指定できません。AS句を使用してvalue_exprに別名を指定すると、c_aliasまたは評価された値の式(EVALNAME value_expr)は、最大4000文字まで指定可能になります。
構文図のXML_attributes_clauseに続くオプションのvalue_exprは、次のようになります。
value_exprがスカラー式である場合、AS句は省略できます。この場合、Oracleは列名を要素名として使用します。
value_exprがオブジェクト型またはコレクションである場合、AS句は必須です。この場合、Oracleは指定されたc_aliasを囲みタグとして使用します。
value_exprがNULLの場合、その値の式に対する要素は作成されません。
例
次の例では、一連の従業員について、従業員の名前と雇用日を指定する、ネストされた要素を持つ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>