我正在经历的行为,我相信是一个错误,在甲骨文和我不知道该怎么办。
可以使用以下查询在Oracle Database 21 c Express Edition Release 21.0.0.0.0 - Production - Version 21.3.0.0.0上复制它:
select json_object(
key 'foo' value json_arrayagg((select * from dual)),
key 'nested' value (select json_object(key 'bar' value 2) from dual)
)
from dual;
运行此查询将抛出以下错误,其中position 133
将光标放置在单词'bar'
的开头:
[42000][937] ORA-00937:不是单组群函数位置:133
EDIT:至于为什么不简化为直接的json_object()
调用,真实的的查询生成会产生这样的查询:
key 'aggregates' value (
select json_object(key 'min' value min("TOTAL"))
from (
select "INVOICE".*
from "INVOICE"
where "INVOICE"."BILLINGCOUNTRY" = 'Canada'
order by
"INVOICE"."BILLINGADDRESS" asc nulls last,
"INVOICE"."INVOICEID" asc nulls last
offset 0 rows
fetch next 30 rows only
) "INVOICE"
) format json
但是,如果注解掉任意一个键/值对,查询将运行:
如果从select语句中展开嵌套的json_object
,它也会运行:
2条答案
按热度按时间yhqotfr81#
您可以将查询简化为:
然后到:
然后进一步:
其中所有输出:
| JSON |
| ------------ |
| {"foo":["X"],"nested":{"bar":2}} |
fiddle
至于您的更新,您可以将
JSON_OBJECT
移出子查询并返回最小值:其中,对于样本数据:
输出:
| JSON |
| ------------ |
| {"aggregates":{"min":100}} |
fiddle
gab6jxml2#
如果将来有人遇到这种情况,同事发现的解决方法是将
json_arrayagg()
移动到产生json_object()
的子查询中:输出:
| data |
| ------------ |
| {"rows":[{"InvoiceId":1,"BillingCountry":"Canada"},{"InvoiceId":2,"BillingCountry":"Canada"},{"InvoiceId":3,"BillingCountry":"Canada"}],"aggregates":{"min":10}} |