|
最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。
每两周的优胜者可获得itpub奖励的技术图书一本。
以往旧题索引:
/forum.php?m ... eid&typeid=1808
原始出处:
作者: Kim Berg Hansen
运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品
我有一张保存着人名的表:
create table qz_people (
id integer primary key
, first_name varchar2(20)
, middle_name varchar2(20)
, last_name varchar2(20)
)
/
insert into qz_people values (42, 'Chuck', 'Edward', 'Brown')
/
insert into qz_people values (43, 'Alice', NULL , 'Jones')
/
insert into qz_people values (44, 'Jenny', 'Senufo', 'Smith')
/
commit
/
对于每一行我需要输出一个名为People的XML元素,它含有这四个列的值作为XML元素。
如果三个名字列中的任何一个为NULL值,那么这个名字元素就不应该出现在XML中,即使作为空元素也不行。(对这些数据而言,Alice Jones 的XML不应该含有MiddleName元素,即使是<MiddleName/>这样的空格式也不行)
我写了这个未完成的查询,使用了XMLSERIALIZE来美化输出XML,这样我就能测试我的XML的生成:
select xmlserialize(
document
##REPLACE##
indent
) as people_xml
from qz_people
order by id
/
哪些选项包含了一个XML表达式,可以用来取代##REPLACE##,使得查询返回这个输出:
PEOPLE_XML
----------------------------------------------------------------------
<People>
<Id>42</Id>
<FirstName>Chuck</FirstName>
<MiddleName>Edward</MiddleName>
<LastName>Brown</LastName>
</People>
<People>
<Id>43</Id>
<FirstName>Alice</FirstName>
<LastName>Jones</LastName>
</People>
<People>
<Id>44</Id>
<FirstName>Jenny</FirstName>
<MiddleName>Senufo</MiddleName>
<LastName>Smith</LastName>
</People>
(A)
XMLELEMENT(
"People"
, XMLELEMENT("Id" , id)
, XMLELEMENT("FirstName" , first_name)
, XMLELEMENT("MiddleName", middle_name)
, XMLELEMENT("LastName" , last_name)
)
(B)
XMLELEMENT(
"People"
, XMLELEMENT("Id", id)
, NVL2(first_name , XMLELEMENT("FirstName" , first_name ), NULL)
, NVL2(middle_name, XMLELEMENT("MiddleName", middle_name), NULL)
, NVL2(last_name , XMLELEMENT("LastName" , last_name ), NULL)
)
(C)
XMLELEMENT(
"People"
, XMLFOREST(id AS "Id")
, XMLFOREST(first_name AS "FirstName")
, XMLFOREST(middle_name AS "MiddleName")
, XMLFOREST(last_name AS "LastName")
)
(D)
XMLELEMENT(
"People"
, XMLFOREST(
id AS "Id"
, first_name AS "FirstName"
, middle_name AS "MiddleName"
, last_name AS "LastName"
)
)
(E)
XMLELEMENT(
XMLFOREST(
id AS "Id"
, first_name AS "FirstName"
, middle_name AS "MiddleName"
, last_name AS "LastName"
) AS "People"
)
(F)
XMLFOREST(
XMLFOREST(
id AS "Id"
, first_name AS "FirstName"
, middle_name AS "MiddleName"
, last_name AS "LastName"
) AS "People"
)
(G)
XMLFOREST(
"People"
, XMLFOREST(
"Id" , id
, "FirstName" , first_name
, "MiddleName", middle_name
, "LastName" , last_name
)
)
|
|