如何在oracle sql developer中提取和求和xml属性值

时间:2013-12-06 15:25:41

标签: sql xml oracle oracle-sqldeveloper

我在表 online_message xml_message 列中存储了很多大型xml邮件作为CLOB。例如,消息看起来像这样:

<?xml version="1.0" encoding="utf-8" ?>
<CustomerDetails xmlns="http://something.com/version/1.0">
<CustomerId>100345</CustomerId>
<AccountDetails Account="account1" Value="103"/>
<AccountDetails Account="account2" Value="142"/>
<AccountDetails Account="account3" Value="345"/>
<AccountDetails Account="account4" Value="634"/>
</CustomerDetails>

<?xml version="1.0" encoding="utf-8" ?>
<CustomerDetails xmlns="http://something.com/version/1.0">
<CustomerId>100465</CustomerId>
<AccountDetails Account="account5" Value="198"/>
<AccountDetails Account="account6" Value="567"/>
<AccountDetails Account="account7" Value="1984"/>
<AccountDetails Account="account8" Value="84"/>
</CustomerDetails>

我想在所有xml消息中获取所有 Value 属性并总结它们。所以最终结果(在这个例子中)应该是103 + 142 + 345 + 634 + 198 + 567 + 1984 + 84 = 4057。知道如何在sql开发人员中做到这一点吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

你可能想试试这个:

SELECT sum(t.v) 
FROM online_message, XMLTABLE('for $i in //*/@Value return $i' 
  PASSING online_message.xml_message 
  COLUMNS v NUMBER PATH '.') t
;

答案 1 :(得分:0)

这是一个相关的方法 - 您可以尝试为您的目的进行编辑。

select Sum(
         to_number(
            extractvalue(
               xmltype(
                  dbms_xmlgen.getxml('select count(*) c from '||table_name)),'/ROWSET/ROW/C'))) count
from user_tables;
相关问题