暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 23ai 中 JSON 函数对 NULL 的处理

149


在之前的版本中,我们在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 TWO
    2 ONE
    3 TWO
    4



    二、 NULL ON NULL 选项

    使用JSON_OBJECT函数时默认使用 NULL ON NULL。但是使用 JSON_ARRAY 函数时,认使用 ABSENT ON NULL。

    当使用NULL ON NULL时,无论是隐式还是显式,数据中的任何NULL值都会在输出中生成为“NULL”。

      -- 隐式:NULL ON NULL


      select 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 NULL


      select 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 NULL
        select json_array(col1) as data from t1;


        DATA
        --------------------------------------------------------------------------------
        ["ONE"]
        ["ONE"]
        []
        []


        SQL>




        -- 显式:ABSENT ON NULL
        select json_array(col1 absent on null) as data from t1;


        DATA
        --------------------------------------------------------------------------------
        ["ONE"]
        ["ONE"]
        []
        []


        SQL>




        --使用:NULL ON NULL
        select 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 STRING


          select 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 STRING


          select json_array(col1 empty string on null) as data from t1;


          DATA
          --------------------------------------------------------------------------------
          ["ONE"]
          ["ONE"]
          [""]
          [""]


          SQL>

          TiDB 社区第四届 1024 程序员心愿节来啦!参与留言活动,许愿想要的功能&周边& TiDB 课程&考证优惠,通通满足你!

          文章转载自山东Oracle用户组,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论