Почему клауза NULL ON NULL не возвращает значение в JSON_OBJECT?
Пытаюсь получить JSON null значение при передаче SQL NULL следующим образом:
select
json_object(key 'a' value a, key 'b' value b null on null) c1,
json_object(key 'a' value a, key 'b' value b absent on null) c2
from (
select 1 a, null b
from dual
) t;
но, к сожалению, запрос возвращает такой результат:
|C1 |C2 |
|----------|----------|
|{"a":1} |{"a":1} |
Согласно документаации JSON_on_null_clause, ожидал получить это:
|C1 |C2 |
|-------------------|----------|
|{"a":1,"b":null} |{"a":1} |
Чего тут не хватает?
PS Использую Oracle XE 18c.
Свободный перевод вопроса Oracle JSON_OBJECT NULL ON NULL clause not working от участника @Lukas Eder
Ответы (1 шт):
Автор решения: 0xdb
→ Ссылка
Участник @BedaHammerschmidt (сотрудник Oracle) подтвердил в ответе, что имеет место пока ещё открытый баг (воспроизводится в 19.08 на LiveSQL):
Bug 31013529 - TWO JSON_OBJECT WITH DIFFERENT ON NULL HANDLER RETURN WRONG RESULTS
Как воркароунд можно воспользоваться скалярным подзапросом (skalar subquery):
select
json_object(key 'a' value t.a, key 'b' value (
select t.b from dual) null on null) c1,
json_object(key 'a' value t.a, key 'b' value (
select t.b from dual) absent on null) c2
from (
select 1 a, null b from dual
) t;
C1 C2
---------------- ----------------
{"a":1,"b":null} {"a":1}