【问题标题】:SUM and COUNT xPath expression doesn't work in Oracle 11.2SUM 和 COUNT xPath 表达式在 Oracle 11.2 中不起作用
【发布时间】:2014-06-09 15:12:51
【问题描述】:

在包含SUMCOUNT 函数的Oracle (11g R2) 中运行一些相当简单的xPath 查询时遇到问题。例如:

select extractvalue(
                    xmltype.createxml('<a>
                                         <b>
                                           <c>1</c>
                                           <d>XXX</d>
                                         </b>
                                         <b>
                                           <c>2</c>
                                           <d>YYY</d>
                                         </b>
                                       </a>')
                    , 'sum(/a/b/c)'
                    ) 
  from dual;

count 也一样:

select extractvalue(
                    xmltype.createxml('<a>
                                         <b>
                                           <c>1</c>
                                           <d>XXX</d>
                                         </b>
                                         <b>
                                           <c>2</c>
                                           <d>YYY</d>
                                         </b>
                                      </a>')
                   , 'count(/a/b/c)'
                   ) 
   from dual;

我收到了ORA-31012 的回复。知道如何让它工作吗?或者有什么可能的解决方法?

【问题讨论】:

    标签: sql xml oracle xpath plsql


    【解决方案1】:

    我不记得上次使用 extractvalue 是什么时候了,因为它在 11g 中已被弃用。相反,我使用的是xmlquery:

    这里有一个简单的例子如何countsum

    with 
    xmldata as (
      select xmltype('<a><b><c>1</c><d>TEXT1</d></b><b><c>2</c><d>TEXT2</d></b></a>') as data_ from dual
    )
    select 'COUNT', xmlquery('
    count($doc/a/b/c)
    ' passing data_ as "doc" returning content) as result_
    from xmldata
    union all
    select 'SUM', xmlquery('
    sum($doc/a/b/c)
    ' passing data_ as "doc" returning content) as result_
    from xmldata
    ;
    

    希望这会有所帮助!

    【讨论】:

    • 问题是我根据标准给出了现成的xPath表达式。在中间某处添加类似'$doc'的东西有点问题。例如在表达式中:count(/a/b/c) + sum(/a/b/d)。在这种情况下,我将不得不使用文本解析。
    【解决方案2】:

    我尝试了来自@user272735 的答案,没有使用as "doc" 并删除$doc,它似乎工作相同:

    with 
    xmldata as (
      select xmltype('<a><b><c>1</c><d>TEXT1</d></b><b><c>2</c><d>TEXT2</d></b></a>') as data_ from dual
    )
    select 'COUNT', xmlquery('
    count(/a/b/c)
    ' passing data_ returning content) a as s result_
    from xmldata
    union all
    select 'SUM', xmlquery('
    sum(/a/b/c)
    ' passing data_ returning content) as result_
    from xmldata
    ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-08
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      • 2019-07-29
      相关资源
      最近更新 更多