【问题标题】:How to return empty array if no data is found with Oracle json?如果使用 Oracle json 找不到数据,如何返回空数组?
【发布时间】:2022-01-18 19:01:22
【问题描述】:
select json_object('totalItems' value 5,
                   'data' value (select nvl(json_arrayagg(
                                  json_object('resourceType' value 1)), '[]')
                                 from dual)
                    returning clob)
from dual;

在上面的代码中,如果在嵌套查询中没有找到行,我需要返回"data": []。使用上述方法返回"data": "[]"。可以以某种方式返回一个空数组吗?

【问题讨论】:

  • 干掉NVL功能
  • 返回 "data": null 不是空数组
  • 嗯,我刚刚测试了它,它返回了 - {"totalItems":5,"data":[]} 。你运行的是什么版本的oracle?也许是缺陷?
  • 我明白了。发布 19.0.0.0.0
  • 我用这个测试过 - select json_object('totalItems' value 5, 'data' value (select json_arrayagg(null) from dual) 返回 clob)

标签: plsql


【解决方案1】:

nvl() 移到更远一点并指定FORMAT JSON 怎么样?

SELECT json_object('totalItems' VALUE 5,
                   'data' VALUE nvl((SELECT json_arrayagg(json_object('resourceType'
                                                        VALUE 1))
                         FROM dual
                        WHERE 0 = 1),
                       '[]') format json RETURNING CLOB)
  FROM dual;

{"totalItems":5,"data":[]}

这是处理数据:

SELECT json_object('totalItems' VALUE 5,
                   'data' VALUE nvl((SELECT json_arrayagg(json_object('resourceType'
                                                        VALUE 1))
                         FROM dual),
                       '[]') format json RETURNING CLOB)
  FROM dual;

{"totalItems":5,"data":[{"resourceType":1}]}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 2021-11-23
    • 2012-08-30
    相关资源
    最近更新 更多