【问题标题】:Oracle Apex format multiple JSON requests to oneOracle Apex 将多个 JSON 请求格式化为一个
【发布时间】:2020-08-21 01:18:36
【问题描述】:

我编写了一个 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】:

    为了模仿集合中的 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;
    

    希望这能解决您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-07
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 2017-10-02
      • 2021-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多