使用SQL提取的值的总和

时间:2017-06-26 18:14:07

标签: sql xml oracle

我有一个像下面这样的xml。

datatype 'a seq = Null | Seq of 'a * (unit -> 'a seq)

我使用extract.xmltype提取了xml字段,现在我得到了以下结果。

42

但我需要将数量值相加,即我需要得到结果为6(4 + 2)。

任何帮助将不胜感激。

谢谢, Shihaj

1 个答案:

答案 0 :(得分:0)

不清楚你的意思是&#34; xml&#34;。如果它应该是一个XML文档,那么你就错过了最外面的标签,可能就像<Document> ..... </Document>

如果你的文本值完全如你所示(这可能非常糟糕),你可以手动包装在这样的最外层标签中,然后使用标准的Oracle XML工具。对于下面的插图,我假设你只有一个字符串(VARCHAR2或CLOB),没有转换为XML类型;在这种情况下,我连接开始和结束标记,然后在查询中转换为XMLtype。

with t ( str ) as (
       select '<LPNDetail>
                    <ItemName>5054807025389</ItemName>
                    <DistroNbr/>
                    <DistributionNbr>TR001000002514</DistributionNbr>
                    <OrderLine>2</OrderLine>
                    <RefField2/>
                    <RefField3>OU01180705</RefField3>
                    <RefField4>0002</RefField4>
                    <RefField5>Retail</RefField5>
                    <Qty>4</Qty>
                    <QtyUom>Unit</QtyUom>
               </LPNDetail>
               <LPNDetail>
                    <ItemName>5054807025563</ItemName>
                    <DistroNbr/>
                    <DistributionNbr>TR001000002514</DistributionNbr>
                    <OrderLine>4</OrderLine>
                    <RefField2/>
                    <RefField3>OU01180705</RefField3>
                    <RefField4>0004</RefField4>
                    <RefField5>Retail</RefField5>
                    <Qty>2</Qty>
                    <QtyUom>Unit</QtyUom>
               </LPNDetail>'
       from   dual
     )
-- End of SIMULATED table (for testing purposes only, not part of the solution)
-- Query begins below this line
select sum(x.qty) as total_quantity
from   t,
       xmltable('/Document/LPNDetail' 
                    passing xmltype('<Document>' || t.str || '</Document>')
                    columns qty number path 'Qty') x
;

<强>输出

TOTAL_QUANTITY
--------------
6