0

我有一个名为 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 来获取数据:

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 列排序的结果(order by 应用于 NUMBER.

你能帮我解决这个问题吗?

4

1 回答 1

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 已经在根节点。此外,我假设您想以数字方式而不是字符串对其进行排序,因此我添加了显式类型转换以使其工作。

于 2012-11-05T09:55:28.337 回答