嵌套for循环中的Xquery where子句

嵌套for循环中的Xquery where子句,xquery,xbase,Xquery,Xbase,我有两个xml文档需要在嵌套的FLWOR语句中引用 MJH source.xml <data-set> <record> <table>CONTACT</table> <column>AGGREGATE_REPORT</column> <change>Dropped</change> <logic>Related to agCenter</logic> </r

我有两个xml文档需要在嵌套的FLWOR语句中引用

MJH source.xml

<data-set>
 <record>
 <table>CONTACT</table>
 <column>AGGREGATE_REPORT</column>
 <change>Dropped</change>
 <logic>Related to agCenter</logic>
 </record>
<record>
 <table>QNR_DESIGN_TEMPLATE</table>
 <column>LOGO1</column>
 <change>Dropped</change>
 <logic>Related to agCenter</logic>
</record>
</data-set>
这是外部文档,我需要提取每行的“表”和“列”值

MVReport—包含SQL语句的报表文档的集合

....
<xml-property name="queryText"><![CDATA[select v.*
from poi_visit_details_v v
where v.site_id=? 
and v.std_code_id in ('15', 'TelephoneMonitoringVisit')
and to_char(v.actual_visit_date, 'yyyy-mm-dd') = substr(?, 0, 10)
and (reports_access_pk.site_access(v.SITE_ID, ?) = 'Y'
or reports_access_pk.superuser_access(?) = 'Y')
]]></xml-property>
<xml-property name="queryText"><![CDATA[select v.*
from poi_visit_details_v v
where v.site_id=? 
and v.std_code_id in ('15', 'TelephoneMonitoringVisit')
and to_char(v.actual_visit_date, 'yyyy-mm-dd') = substr(?, 0, 10)
and (reports_access_pk.site_access(v.SITE_ID, ?) = 'Y'
or reports_access_pk.superuser_access(?) = 'Y')
]]></xml-property>

这个集合是内部循环,我需要在其中查找包含单词select和从外部循环返回的“table”、“column”值的所有SQL语句

这是我的xquery

我的问题是如何在内部循环的where中引用外部“表”和“列”值。。。和条款

for $target in doc("H:\MJH source.xml")/data-set/record
let $tTable := $target/table
let $tColumn := $target/column
for $sql in collection("MVReport") //*:xml-property[@name = "queryText"]
where $sql contains text "select"
and $sql contains $tTable
and $sql contains $tColumn
let $report := base-uri()
return <report><name>{$sql/base-uri()}</name><sql>{$sql}</sql></report>

感谢您的帮助。

表面上看,您似乎在$tTable和$tColumn的名称下成功且正确地引用了它们。这对你不管用吗?如果没有,您会收到什么错误消息?另外,请注意,严格来说,这里没有外部for循环,也没有内部for循环:您只有一个FLWOR表达式,包含多个for和let子句以及一个return子句。您对全文包含文本运算符使用的语法有信心吗?看起来您可能是偶然遗漏了关键字文本……我对您的语句感兴趣,即查询没有内部/外部循环。查询会像我期望的那样工作吗?也就是说,循环遍历所有外部表/列组合,并在内部循环集合中搜索select和当前表/列组合的出现情况?该查询将如我想象的那样工作:两个let子句将为$target的每个不同值赋值,对于$target、$tTable、$tColumn、$sql的每个不同元组,return子句将被计算一次。从表面上看,似乎您在$tTable和$tColumn的名称下非常成功和正确地引用了它们。这对你不管用吗?如果没有,您会收到什么错误消息?另外,请注意,严格来说,这里没有外部for循环,也没有内部for循环:您只有一个FLWOR表达式,包含多个for和let子句以及一个return子句。您对全文包含文本运算符使用的语法有信心吗?看起来您可能是偶然遗漏了关键字文本……我对您的语句感兴趣,即查询没有内部/外部循环。查询会像我期望的那样工作吗?也就是说,循环遍历所有外部表/列组合,并在内部循环集合中搜索select和当前表/列组合的出现情况?该查询将如我想象的那样工作:两个let子句将为$target的每个不同值赋值,对于$target、$tTable、$tColumn、$sql值的每个不同元组,将对return子句求值一次。