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),

在函数内部我有一个 SELECT 创建一个 JSON_ARRAYAGG 并返回一个 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.