我有一个查询:
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:如果没有MAP或ORDER方法,则不能对对象进行ORDER。
有什么想法吗? 谢谢:)
请PS,不要问我“为什么要避免内阻解决方案?”之类的问题。
答案 0 :(得分: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>
您不能在结果集中将内部计数视为单独的列,但看起来您并不是真正需要它。