如何在XQUERY子序列中使用order by子句?

时间:2012-11-05 06:18:52

标签: xquery

我有一个名为TBTASK结构的表如下

PRIID CHARACTER(15) NOT NULL,
BID CHARACTER(10) NOT NULL,
REF CHARACTER(15) NOT NULL,
TIME TIMESTAMP NOT NULL DEFAULT CURRENT TIMESTAMP,
XMLREC XML NOT NULL

存储在DB XMLREC列中的XML如下

<Root><Code>6</Code><Id>4</Id><Number>999</Number></Root>
<Root><Code>6</Code><Id>4</Id><Number>1001</Number></Root>
<Root><Code>6</Code><Id>4</Id><Number>1002</Number></Root>
<Root><Code>6</Code><Id>4</Id><Number>998</Number></Root>

我在XQUERY下面使用geeting数据:

XQUERY
let $str:= subsequence((db2-fn:sqlquery( 'SELECT XMLREC FROM LIS.TBTASK WHERE BID=1') 
    /Root[Code='6']),1,5)    
order by $str/Root/Number
return ($str)

但是我没有按照NUMBER列的排序顺序获得结果(在NUMBER上应用了排序依据。

你可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

这应该有效:

for $str in (db2-fn:sqlquery( 'SELECT XMLREC FROM LIS.TBTASK WHERE BID=1')/Root[Code='6']),1,5)    
order by xs:int($str/Number)
return ($str)

请注意,您需要至少一个for语句才能使用order by。此外,您的路径($ str / Root / Number)错误,因为$ str已经在根节点上。另外我假设你想要以数字方式而不是字符串对它进行排序,所以我添加了一个显式类型转换来使它工作。