Oracle SQL 中多个函数的 JSON 构造并没有以良好的格式结束

问题描述 投票:0回答:1

我正在尝试在 Oracle SQL 中的包内创建包含多个函数的 JSON 文件。我可以在一个选择中创建整个 JSON,但这是一个相当大的选择,因此,我想将所有内容划分为多个函数。

问题是,当尝试组装整个 JSON 时,内部应该有数组并维护 JSON 结构的值却被放置为字符串。

小例子:

"indicadoresOperacao": "[{\"id\":\"11122/2024\",\"indicadorConceitoSincronizado\":\"true\",\"indicadorSincronizarConceito\":\"false\"

这是在这里生成的:

 KEY 'indicadoresOperacao'   VALUE get_json_indicadores_op_plano( id_pr),

在函数内部,我有一个创建 JSON_ARRAYAGG 的 SELECT,并且返回一个 CLOB。

我尝试的所有不是一起创建整个事物(这需要更多时间)的结果都是相同的格式,我想我知道问题是我试图将 VALUE 与 CLOB 关联,而不是选择它我自己,并且我不知道如何解决它以使代码在需要时易于阅读和更改。

sql json oracle
1个回答
0
投票

如果您返回 JSON 格式的值,请使用

FORMAT JSON
按原样使用该值:

KEY 'indicadoresOperacao'
  VALUE get_json_indicadores_op_plano(id_pr) FORMAT JSON

但是,您可能不需要使用函数。例如,如果您有示例数据:

CREATE TABLE table_name (id, ics, isc) AS
  SELECT '11122/2024', 1, 0 FROM DUAL UNION ALL
  SELECT '11123/2024', 0, 1 FROM DUAL;

然后您可以使用以下方法将其表示为包含对象数组的对象:

SELECT JSON_OBJECT(
         KEY 'indicadoresOperacao' VALUE JSON_ARRAYAGG(
           JSON_OBJECT(
             KEY 'id' VALUE id,
             KEY 'indicadorConceitoSincronizado'
               VALUE CASE ics WHEN 1 THEN 'true' ELSE 'false' END FORMAT JSON,
             KEY 'indicadorSincronizarConceito'
               VALUE CASE isc WHEN 1 THEN 'true' ELSE 'false' END FORMAT JSON
             RETURNING CLOB
           )
           RETURNING CLOB
         )
         RETURNING CLOB
       ) AS json
FROM   table_name

哪个输出:

JSON
{"indicadoresOperacao":[{"id":"11122/2024","indicadorConceitoSincronizado":true,"indicadorSincronizarConceito":false},{"id":"11123/2024","indicadorConceitoSincronizado":false,"indicadorSincronizarConceito “:正确}]}

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.