構文
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>