[Oracle Apex格式化对一个的多个JSON请求

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

我编写了一个PL / SQL代码,该代码请求Dremio服务并接收带有数据库输出的JSON。输出将保存到REST_COLLECTION Clob。输出将显示在APEX页中。Dremio服务的问题在于,我一次只能接收500数据。解决方案是循环,每次都重复结果。那就是我的问题。

JSON看起来像这样:

{"rowCount":307,"schema":[{"name":"EXPORTDATUM","type":{"name":"DATE"}},   
{"name":"DOKUMENTE","type":{"name":"DOUBLE"}},{"name":"SEITEN","type":{"name":"DOUBLE"}}, 
{"name":"STAPELKLASSE","type":{"name":"VARCHAR"}},{"name":"FORMULAR","type"
{"name":"VARCHAR"}}],"rows":[{"EXPORTDATUM":"2019-02-04","DOKUMENTE":9.0,"SEITEN":37.0,"STAPELKLASSE":"TEST","FORMULAR":"TEST"}]}

由于多个根元素,每次在页面视图上连接JSON字符串都会导致JSON错误。

SUBSTR给定的字符串不是常用的方式,Dremio的输出可能会更改。

每次都可以创建多个Clob,但是我的查询然后不知道Clob的数量。查询看起来像这样顺便说一句:

select 
    to_date(j."EXPORTDATUM", 'YYYY-MM-DD') as "EXPORTDATUM",
    j."DOKUMENTE",
    j."SEITEN",
    j."STAPELKLASSE",
    j."FORMULAR"

from apex_collections c, json_table(
    c.clob001 format json,
    '$.rows[*]'
    columns (
        "EXPORTDATUM"   VARCHAR2(4000)  path '$.EXPORTDATUM',
"DOKUMENTE"  VARCHAR2(4000) path '$.DOKUMENTE',
"SEITEN"   VARCHAR2(4000) path '$.SEITEN',
"STAPELKLASSE"   VARCHAR2(4000)  path '$.STAPELKLASSE',
"FORMULAR"   VARCHAR2(4000)  path '$.FORMULAR'
    )
) j

where c.collection_name = 'REST_COLLECTION'

我希望有一个解决方案,可以将多个JSON合并而不使用它的子字符串。

json oracle plsql oracle-apex oracle12c
1个回答
1
投票

为了模仿集合中的JSON行,我用Union创建了一个简单的SQL。

您可以使用APEX_JSON API生成JSON文档。

以下是可帮助您入门的示例代码。您只需要进行一些更改即可满足您的要求。

declare
l_json clob;
begin
  apex_json.initialize_clob_output;
  apex_json.open_array;
for rec in (select  * from(
select 
    to_date(j."EXPORTDATUM", 'YYYY-MM-DD') as "EXPORTDATUM",
    j."DOKUMENTE",
    j."SEITEN",
    j."STAPELKLASSE",
    j."FORMULAR"

from  json_table(
   '{
    "rowCount": 307,
    "schema": [{
            "name": "EXPORTDATUM",
            "type": {
                "name": "DATE"
            }
        },
        {
            "name": "DOKUMENTE",
            "type": {
                "name": "DOUBLE"
            }
        }, {
            "name": "SEITEN",
            "type": {
                "name": "DOUBLE"
            }
        },
        {
            "name": "STAPELKLASSE",
            "type": {
                "name": "VARCHAR"
            }
        }, {
            "name": "FORMULAR",
            "type": {
                "name": "VARCHAR"
            }
        }
    ],
    "rows": [{
        "EXPORTDATUM": "2019-02-04",
        "DOKUMENTE": 9.0,
        "SEITEN": 37.0,
        "STAPELKLASSE": "row1",
        "FORMULAR": "row1"
    },
    {
        "EXPORTDATUM": "2019-02-04",
        "DOKUMENTE": 9.0,
        "SEITEN": 37.0,
        "STAPELKLASSE": "row2",
        "FORMULAR": "row2"
    }]
}' format json,
    '$.rows[*]'
    columns (
        "EXPORTDATUM"   VARCHAR2(4000)  path '$.EXPORTDATUM',
"DOKUMENTE"  VARCHAR2(4000) path '$.DOKUMENTE',
"SEITEN"   VARCHAR2(4000) path '$.SEITEN',
"STAPELKLASSE"   VARCHAR2(4000)  path '$.STAPELKLASSE',
"FORMULAR"   VARCHAR2(4000)  path '$.FORMULAR'
    )
) j
union all
select 
    to_date(j."EXPORTDATUM", 'YYYY-MM-DD') as "EXPORTDATUM",
    j."DOKUMENTE",
    j."SEITEN",
    j."STAPELKLASSE",
    j."FORMULAR"

from  json_table(
   '{
    "rowCount": 307,
    "schema": [{
            "name": "EXPORTDATUM",
            "type": {
                "name": "DATE"
            }
        },
        {
            "name": "DOKUMENTE",
            "type": {
                "name": "DOUBLE"
            }
        }, {
            "name": "SEITEN",
            "type": {
                "name": "DOUBLE"
            }
        },
        {
            "name": "STAPELKLASSE",
            "type": {
                "name": "VARCHAR"
            }
        }, {
            "name": "FORMULAR",
            "type": {
                "name": "VARCHAR"
            }
        }
    ],
    "rows": [{
        "EXPORTDATUM": "2019-02-04",
        "DOKUMENTE": 9.0,
        "SEITEN": 37.0,
        "STAPELKLASSE": "row3",
        "FORMULAR": "row3"
    },
    {
        "EXPORTDATUM": "2019-02-04",
        "DOKUMENTE": 9.0,
        "SEITEN": 37.0,
        "STAPELKLASSE": "row4",
        "FORMULAR": "row4"
    }]
}' format json,
    '$.rows[*]'
    columns (
        "EXPORTDATUM"   VARCHAR2(4000)  path '$.EXPORTDATUM',
"DOKUMENTE"  VARCHAR2(4000) path '$.DOKUMENTE',
"SEITEN"   VARCHAR2(4000) path '$.SEITEN',
"STAPELKLASSE"   VARCHAR2(4000)  path '$.STAPELKLASSE',
"FORMULAR"   VARCHAR2(4000)  path '$.FORMULAR'
    )
) j) )
loop
    apex_json.open_object;
    apex_json.write('EXPORTDATUM', rec.EXPORTDATUM);
    apex_json.write('DOKUMENTE', rec.DOKUMENTE);
    apex_json.write('SEITEN', rec.SEITEN);
    apex_json.write('STAPELKLASSE', rec.STAPELKLASSE);
    apex_json.write('FORMULAR', rec.FORMULAR);
    apex_json.close_object;
end loop;
    apex_json.close_array;
    dbms_output.put_line(apex_json.get_clob_output( p_free => true ) );
end;

我希望这能解决您的问题。

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