希望这很简单,但我遗漏了一些东西。
这是我的XML:
<?xml version = '1.0' encoding = 'UTF-8'?><PFA>
<Person id="11" action="add" date="20-Nov-2012">
<Gender>Male</Gender>
<ActiveStatus>Active</ActiveStatus>
<Deceased>Yes</Deceased>
<RoleDetail>
<Roles RoleType="Primary Occupation">
<OccTitle OccCat="16">Deceased</OccTitle>
</Roles>
<Roles RoleType="Previous Roles">
<OccTitle SinceMonth="Nov" SinceYear="2010" ToMonth="Jan" ToYear="2011" OccCat="16">Candidate</OccTitle>
<OccTitle SinceMonth="Mar" SinceYear="2005" ToYear="2005" OccCat="16">Candidate,23</OccTitle>
<OccTitle OccCat="16">President</OccTitle>
<OccTitle SinceDay="22" SinceMonth="Oct" SinceYear="1993" ToDay="15" ToMonth="Mar" ToYear="2003" OccCat="1">President </OccTitle>
<OccTitle OccCat="7">Supreme Commander</OccTitle>
<OccTitle SinceDay="08" SinceMonth="Dec" SinceYear="1976" ToDay="14" ToMonth="Jul" ToYear="1978" OccCat="1">Prime Minister </OccTitle>
</Roles>
</RoleDetail>
</Person>
</PFA>
我正在查询此xml以将值存储在我的表中。
我的查询 -
SELECT t.personid, t.occtitle,r.roleid,t.sinceday,t.sincemonth,t.sinceyear,t.today,t.tomonth,t.toyear,t.occcat
FROM xml_files p,master_roletypelists r,
XMLTable(
'for $i in PFA/Person/RoleDetail/Roles/OccTitle
return <row>
{
$i/../../../@id,
$i/../@RoleType,
$i/@SinceDay,
$i/@SinceMonth,
$i/@SinceYear,
$i/@ToDay,
$i/@ToMonth,
$i/@ToYear,
$i/@OccCat
}
</row>'
PASSING p.filecontent
COLUMNS
personid number PATH '@id',
occtitle VARCHAR2(4000) PATH '.',
RoleType VARCHAR2(2000) PATH '@RoleType',
sinceday VARCHAR2(2000) PATH '@SinceDay',
sincemonth VARCHAR2(2000) PATH '@SinceMonth',
sinceyear VARCHAR2(2000) PATH '@SinceYear',
today VARCHAR2(2000) PATH '@ToDay',
tomonth VARCHAR2(2000) PATH '@ToMonth',
toyear VARCHAR2(2000) PATH '@ToYear',
occcat VARCHAR2(2000) PATH '@OccCat'
) t where t.roletype = r.rolename
;
但是为此,我将列'OCCTITLE'视为空。
请帮我修改我的查询以获取OccTitle节点值。 例如,在第一行的OccTitle列中,我应该得到值“Deceased”而不是null。
如果这不是这样做的方法,请帮我纠正。 任何帮助将不胜感激。
答案 0 :(得分:4)
您从未包含<OccTitle/>
元素。例如,使用
for $i in PFA/Person/RoleDetail/Roles/OccTitle
return <row>
{
$i/../../../@id,
$i/../@RoleType,
$i/@SinceDay,
$i/@SinceMonth,
$i/@SinceYear,
$i/@ToDay,
$i/@ToMonth,
$i/@ToYear,
$i/@OccCat,
$i (: was missing :)
}
</row>
这将包括整个元素。如果您只对数据感兴趣,请将该行替换为data($i)
。