我使用的是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在这里。