【问题标题】:ORACLE, XMLAGG(arg), null argORACLE,XMLAGG(arg),空 arg
【发布时间】:2018-12-12 11:10:03
【问题描述】:

我有一个问题:

SELECT  xmlelement("Response",
            xmlelement("hist",
              xmlelement("details",
                xmlagg(x.node)))
          ) AS XML_HIST,
          x.cnt
 FROM     (
            SELECT  null AS node,
                    COUNT(1) OVER() AS cnt
            FROM    dual
            --WHERE 1=2
         ) x
  GROUP BY x.cnt

查询 x 是针对这个问题(敏感数据)进行的。

当查询 x 返回任何数据时,一切都很好。但是当表中没有记录时(这里:WHERE 1=2),我在包中的代码失败并出现错误 no_data_found。

我正在尝试寻找与

不同的灵魂
<<inner_block>>
begin
SELECT..
exception
when others then...
end inner_block;

我试图做类似的事情

SELECT  MAX(xmlelement("docGetPackageHistoryResponse",
            xmlelement("histories",
              xmlelement("contract-history",
                xmlagg(x.node)))
          )) AS XML_HIST,
    MAX(cnt)

但我收到错误 ORA-22950: cannot ORDER objects without MAP or ORDER method.

有什么想法吗? 谢谢:)

请不要问我“为什么要避免内部块解决方案?”之类的问题。

【问题讨论】:

    标签: xml oracle plsql


    【解决方案1】:

    错误来自于将聚合 max() 应用于 XMLElement,这实际上没有任何意义;如果没有它,它的行为仍然与您的原始查询相同。

    我认为您只是在错误的点上进行了汇总;你可以这样做:

    SELECT xmlelement("Response",
             xmlelement("hist",
               xmlelement("details",
                 (
                   SELECT xmlagg(x.node)
                   FROM (
                     SELECT null AS node,
                            COUNT(1) OVER() AS cnt
                     FROM   dual
                     WHERE 1=2
                   ) x
                   GROUP BY x.cnt
                 )
               )
             )
           ) AS XML_HIST
    FROM dual
    /
    
    XML_HIST                                                                        
    --------------------------------------------------------------------------------
    <Response><hist><details></details></hist></Response>
    

    您无法在结果集中将内部计数视为单独的列,但看起来您并不真正需要它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多