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列ごとにソートされた順序で結果を取得していません(順序は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)

order by を有効にするには、少なくとも 1 つの for ステートメントが必要であることに注意してください。また、$str はすでにルートノードにあるため、パス ($str/Root/Number) が間違っていました。さらに、これを文字列としてではなく数値的にソートしたいと考えたので、明示的な型キャストを追加して機能させました。

于 2012-11-05T09:55:28.337 に答える