我在表 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开发人员中做到这一点吗?
谢谢!
答案 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;