
在之前的版本中,我们在JSON生成过程中处理 NULL 的唯一选项是 NULL ON NULL 和 ABSENT ON NULL,没有将 NULL 做为空字符串处理的选项。
在Oracle 23ai中新增了一个 EMPTY STRING ON NULL 选项用于将 NULL 值做为空字符串处理。
在Oracle 23ai中可以使用以下选项处理字段为 NULL 值的情况:
NULL ON NULL :将 NULL 值作为 NULL。
ABSENT ON NULL :将忽略该元素。
EMPTY STRING ON NULL:将 JSON NULL 值做为空字符串。
一、创建测试表
我们创建一个测试表并插入4条数据,用于测试 Oracle 23ai中 JSON 的空字符串。
create table t1 (col1 VARCHAR2(10),col2 VARCHAR2(10));insert into t1 values ('ONE', 'TWO');insert into t1 values ('ONE', null);insert into t1 values (null, 'TWO');insert into t1 values (null, null);commit;select rownum, col1, col2 from t1;ROWNUM COL1 COL2---------- ---------- ----------1 ONE TWO2 ONE3 TWO4
二、 NULL ON NULL 选项
使用JSON_OBJECT函数时默认使用 NULL ON NULL。但是使用 JSON_ARRAY 函数时,默认使用 ABSENT ON NULL。
当使用NULL ON NULL时,无论是隐式还是显式,数据中的任何NULL值都会在输出中生成为“NULL”。
-- 隐式:NULL ON NULLselect json_object(*) as data from t1;DATA--------------------------------------------------------------------------------{"COL1":"ONE","COL2":"TWO"}{"COL1":"ONE","COL2":null}{"COL1":null,"COL2":"TWO"}{"COL1":null,"COL2":null}SQL>-- 显式:NULL ON NULLselect json_object(* null on null) as data from t1;DATA--------------------------------------------------------------------------------{"COL1":"ONE","COL2":"TWO"}{"COL1":"ONE","COL2":null}{"COL1":null,"COL2":"TWO"}{"COL1":null,"COL2":null}SQL>
三、 ABSENT ON NULL 选项
当使用 ABSENT ON NULL 时,数据中的任何空值都会导致相应的元素从输出中删除。
select json_object(* absent on null) as data from t1;DATA--------------------------------------------------------------------------------{"COL1":"ONE","COL2":"TWO"}{"COL1":"ONE"}{"COL2":"TWO"}{}SQL>-- 隐式: ABSENT ON NULLselect json_array(col1) as data from t1;DATA--------------------------------------------------------------------------------["ONE"]["ONE"][][]SQL>-- 显式:ABSENT ON NULLselect json_array(col1 absent on null) as data from t1;DATA--------------------------------------------------------------------------------["ONE"]["ONE"][][]SQL>--使用:NULL ON NULLselect json_array(col1 null on null) as data from t1;DATA--------------------------------------------------------------------------------["ONE"]["ONE"][null][null]SQL>
四、 EMPTY STRING ON NULL 选项
在Oracle数据库23ai中,我们现在可以选择在NULL上使用 EMPTY STRING。在这种情况下,空值在输出中显示为空字符串。
-- JSON_OBJECT 函数在 NULL 字段上使用 EMPTY STRINGselect json_object(* empty string on null) as data from t1;DATA--------------------------------------------------------------------------------{"COL1":"ONE","COL2":"TWO"}{"COL1":"ONE","COL2":""}{"COL1":"","COL2":"TWO"}{"COL1":"","COL2":""}SQL>--JSON_ARRAY 函数在 NULL 字段上使用 EMPTY STRINGselect json_array(col1 empty string on null) as data from t1;DATA--------------------------------------------------------------------------------["ONE"]["ONE"][""][""]SQL>
文章转载自山东Oracle用户组,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




