2

これが非常に単純であることを願っていますが、何かが欠けています。

これは私の 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」をnullとして取得しています。

OccTitle ノード値も取得するようにクエリを変更するのを手伝ってください。たとえば、最初の行の OccTitle 列では、null ではなく "Deceased" という値を取得することになっています。

これがこれを行う方法でない場合は、修正するのを手伝ってください。どんな助けでも大歓迎です。

4

1 に答える 1

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)ます。

于 2013-05-28T17:45:16.320 に答える