使用带有CASE表达式的JSON_ARRAYAGG模拟标准SQL FILTER时出现Oracle错误



我使用的是Oracle 18c(也在19c中复制(,我想模拟JSON_ARRAYAGG()聚合函数中的标准SQLFILTER子句,以从聚合中筛选出值。然而,这会产生一个错误:

select json_arrayagg(
case when t.a < 2 then json_object(key 'a' value t.a) end
)
from (
select 1 a
from dual
union all
select 2 a
from dual
) t

错误为:

ORA-40590:无效格式

dbfiddle。错误的原因是什么?这是Oracle中的错误吗?

这似乎是一个错误,在19.10中已经修复。添加一个明确的ELSE子句似乎可以解决这个问题:

select json_arrayagg(
case 
when t.a < 2 then json_object(key 'a' value t.a) 
else null
end
)
from (
select 1 a
from dual
union all
select 2 a
from dual
) t

这现在产生了预期的结果:

[{"a":1}]

dbfiddle在这里。

最新更新