oracle json to table,ORACLE - JSON To Key Value Pair Table

Here's a variant that will walk a nested structure.

SQL> drop FUNCTION PROCESS_JSON_DOCUMENT

2 /

Function dropped.

SQL> drop TYPE NV_PAIR_TABLE

2 /

Type dropped.

SQL> drop TYPE NV_PAIR_T

2 /

Type dropped.

SQL> create or replace TYPE NV_PAIR_T as object (

2 JSON_PATH VARCHAR2(4000),

3 VALUE VARCHAR2(4000)

4 )

5 /

Type created.

SQL> create or replace TYPE NV_PAIR_TABLE

2 as TABLE of NV_PAIR_T

3 /

Type created.

SQL> create or replace FUNCTION PROCESS_JSON_DOCUMENT(P_JSON_PATH VARCHAR2, P_JSON_DOCUMENT VARCHAR2)

2 return NV_PAIR_TABLE PIPELINED

3 as

4 V_JSON_OBJECT JSON_OBJECT_T := JSON_OBJECT_T(P_JSON_DOCUMENT);

5 V_KEY_LIST JSON_KEY_LIST := V_JSON_OBJECT.get_keys();

6 V_KEY_NAME VARCHAR2(4000);

7 V_JSON_PATH VARCHAR2(4000);

8 V_CHILD_DOCUMENT VARCHAR2(4000);

9 begin

10 for i in 1..V_KEY_LIST.count loop

11 V_KEY_NAME := V_KEY_LIST(i);

12 if (V_JSON_OBJECT.get_type(V_KEY_LIST(i)) <> 'OBJECT') then

13 pipe row (NV_PAIR_T(P_JSON_PATH || '.' || V_KEY_NAME,V_JSON_OBJECT.get_string(V_KEY_NAME)));

14 else

15 V_JSON_PATH := P_JSON_PATH || '.' || V_KEY_NAME;

16 V_CHILD_DOCUMENT := V_JSON_OBJECT.get_object(V_KEY_NAME).to_string();

17 for j in (select * from TABLE(PROCESS_JSON_DOCUMENT(V_JSON_PATH, V_CHILD_DOCUMENT))) loop

18 pipe row (NV_PAIR_T(J.JSON_PATH,J.VALUE));

19 end loop;

20 end if;

21 end loop;

22 end;

23 /

Function created.

SQL> column JSON_PATH format A32

SQL> column VALUE format A32

SQL> select *

2 from TABLE(PROCESS_JSON_DOCUMENT('$','{"A":"AA", "B":"BB", "C":"CC", "X" : {"A":"AA", "B":"BB", "C":"CC"}}'))

3 /

$.A AA

$.B BB

$.C CC

$.X.A AA

$.X.B BB

$.X.C CC

6 rows selected.

SQL>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值