Ошибка при использовании JSON_ARRAYAGG с выражением CASE: ORA-40590: invalid format
Использую Oracle 18c (воспроизводится и в 19c) и хотел бы применить стандартное SQL выражение CASE в агрегатной функции JSON_ARRAYAGG(), чтобы исключить значения из агрегации.
Однако это приводит к ошибке (на db<>fiddle):
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: invalid format
Что вызывает эту ошибку? Это новый баг в Oracle?
Свободный перевод вопроса Oracle bug when using JSON_ARRAYAGG with CASE expression to emulate standard SQL FILTER от участника @Lukas Eder
Ответы (1 шт):
Это действительно баг, который был исправлен в 19.10
Прим.ред.: текущий долгосрочный релиз 19.03.
Надо добавить явно условия 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
Даст ожидаемый результат (на db<>fiddle):
[{"a":1}]
Свободный перевод ответа от участника @Lukas Eder