Oracle 的处理方式似乎存在错误JSON_OBJECT
它将从最后一个参数中获取参数JSON_on_null_clause
在声明中并将其应用于所有JSON_OBJECT
表达式:
CREATE TABLE t ( a,b ) AS
SELECT 1, null FROM DUAL UNION ALL
SELECT 2, 'bb' FROM DUAL;
如果你这样做:
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 t;
那么输出是:
C1 | C2
:--------------- | :---------------
{"a":1} | {"a":1}
{"a":2,"b":"bb"} | {"a":2,"b":"bb"}
如果您使用相反的表达式执行相同的查询:
select json_object(
KEY 'a' VALUE a,
KEY 'b' VALUE b absent on null
) c2,
json_object(
KEY 'a' VALUE a,
KEY 'b' VALUE b null on null
) c1
from t;
那么输出是:
C2 | C1
:--------------- | :---------------
{"a":1,"b":null} | {"a":1,"b":null}
{"a":2,"b":"bb"} | {"a":2,"b":"bb"}
数据库小提琴here