PLSQL循环通过JSON对象

PLSQL looping through JSON object(PLSQL循环通过JSON对象)
本文介绍了PLSQL循环通过JSON对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

基本上我有一个类似于[{";group";:";groupa";,";Status";:";active";},{";group";:";groupb";,";Status";:";inactive";}]的json,我只想循环和提取,并将它们保存在变量中,以便循环并将组与某个变量进行比较。

例如

group := 'groupc'
while counter < jsonGroup.count
loop
if jsonGroup(counter) := group then ....

是否可以将组作为数组或表保存到jsonGroup中?

谢谢

推荐答案

可以使用JSON_ARRAY_T功能将值存储到数组中,如MT0所述,或者使用JSON_TABLE,如果您的JSON已经存储在表中,这可能会更好。

下面是如何使用这两种方法将组存储到数组中的示例。

DECLARE
    l_json_text   VARCHAR2 (100)
        := '[{"group":"groupa","status":"active"},{"group":"groupb","status":"inactive"}]';

    TYPE tab_t IS TABLE OF VARCHAR2 (100);

    l_table       tab_t := tab_t ();
    l_array       json_array_t;

    PROCEDURE print_tab
    IS
    BEGIN
        FOR i IN 1 .. l_table.COUNT
        LOOP
            DBMS_OUTPUT.put_line (l_table (i));
        END LOOP;
    END;
BEGIN
    l_array := json_array_t (l_json_text);

    l_table.EXTEND (l_array.get_size);

    FOR i IN 1 .. l_array.get_size
    LOOP
        l_table (i) := TREAT (l_array.get (i - 1) AS json_object_t).get_string ('group');
    END LOOP;

    DBMS_OUTPUT.put_line ('After JSON_ARRAY_T method');
    print_tab;

    l_table.delete;

    DBMS_OUTPUT.put_line ('After delete');
    print_tab;

    SELECT grp
      BULK COLLECT INTO l_table
      FROM JSON_TABLE (l_json_text, '$[*]' COLUMNS grp PATH '$.group');

    DBMS_OUTPUT.put_line ('After JSON_TABLE method');
    print_tab;
END;
/

这篇关于PLSQL循环通过JSON对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

SQL to Generate Periodic Snapshots from Transactions Table(用于从事务表生成定期快照的SQL)
MyBatis support for multiple databases(MyBatis支持多个数据库)
Oracle 12c SQL: Missing column Headers in result(Oracle 12c SQL:结果中缺少列标题)
SQL query to find the number of customers who shopped for 3 consecutive days in month of January 2020(查询2020年1月连续购物3天的客户数量)
How to get top 10 data weekly (This week, Previous week, Last month, 2 months ago, 3 month ago)(如何每周获取前十大数据(本周、前一周、上个月、2个月前、3个月前))
Select the latest record for an Id per day - Oracle pl sql(选择每天ID的最新记录-Oracle pl SQL)