2011-12-11 23 views
1

xqueryを使用して従業員がいない従業員を検索しようとしていますが、クエリを実行するとき、私が知っている情報は正しくありません。以下は、私が使用しているクエリです:xqueryを使用して従業員がいない従業員を探す

xquery 
let $d:=doc("/public/book/company.xml") 
let $e:=$d/companyDB/employees/employee 
for $name in $d/companyDB/employees/employee 
where count($e/dependent)<1 
return <e>{$e/fname}{$e/lname}</e> 
/

私はこれが1未満の従業員しか返さないと予想しています。したがって、例のデータが与えられると、それはJames Borgだけを返します。しかし、それは皆を返します。どうしてこれなの?

編集:Oracle 11gでは、SQL Plusでxqueryコマンドを使用しています。

<companyDB xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="company.xsd"> 
<departments>...</departments> 
    <employees> 
    <employee ssn="333445555" worksFor="5" supervisor="888665555" manages="5"> 
     <fname>Franklin</fname> 
     <minit>T</minit> 
     <lname>Wong</lname> 
     <dob>08-DEC-45</dob> 
     <address>638 Voss, Houston, TX</address> 
     <sex>M</sex> 
     <salary>40000</salary> 
     <dependents> 
      <dependent>...</dependent> 
      <dependent>...</dependent> 
      <dependent>...</dependent> 
     </dependents> 
     <supervisees essns="123456789 666884444 453453453"/> 
     <projects>...</projects> 
    </employee> 
    <employee ssn="888665555" worksFor="1" manages="1"> 
     <fname>James</fname> 
     <minit>E</minit> 
     <lname>Borg</lname> 
     <dob>10-NOV-27</dob> 
     <address>450 Stone, Houston, TX</address> 
     <sex>M</sex> 
     <salary>55000</salary> 
     <supervisees essns="333445555 987654321"/> 
     <projects>...</projects> 
    </employee> 
</employees> 
</companyDB> 

答えて

2

簡単なXPath式は、連結名の指名手配シーケンスを生成します。

doc("/public/book/company.xml") 
     /*/employees/employee[not(dependents/dependent)] 
         /concat(fname, lname) 
1
let $xml := <companyDB> 
    <employees> 
    <employee ssn="333445555" worksFor="5" supervisor="888665555" manages="5"> 
     <fname>Franklin</fname> 
     <minit>T</minit> 
     <lname>Wong</lname> 
     <dob>08-DEC-45</dob> 
     <address>638 Voss, Houston, TX</address> 
     <sex>M</sex> 
     <salary>40000</salary> 
     <dependents> 
      <dependent>...</dependent> 
      <dependent>...</dependent> 
      <dependent>...</dependent> 
     </dependents> 
     <supervisees essns="123456789 666884444 453453453"/> 
     <projects>...</projects> 
    </employee> 
    <employee ssn="888665555" worksFor="1" manages="1"> 
     <fname>James</fname> 
     <minit>E</minit> 
     <lname>Borg</lname> 
     <dob>10-NOV-27</dob> 
     <address>450 Stone, Houston, TX</address> 
     <sex>M</sex> 
     <salary>55000</salary> 
     <supervisees essns="333445555 987654321"/> 
     <projects>...</projects> 
    </employee> 
</employees> 
</companyDB> 

return 
$xml/employees/employee[not(dependents/dependent)] 

述語を使用することが容易になる(そして速い)ことができます:ここでは

xmlファイルのサンプルです。

+0

私はこれを試してみました、それが動作しませんでした、なぜですか? doc()がドキュメント{}を返すので、$ xml:= doc( "/ public/book/company.xml") return $ xml/employees/employee [非依存(依存/依存)] ' – mnky9800n

+0

$ xml/companyDB/employees/employeeのようなxp​​ath、probのようなものを修正してください。[not(dependents/dependent)] –

関連する問題