CREATE TABLE json_test_tab (
  id    RAW(16) NOT NULL,
  data  CLOB,
  CONSTRAINT json_test_tab_pk PRIMARY KEY (id),
  CONSTRAINT json_test_tab_json_chk CHECK (data IS JSON)
);


INSERT INTO json_test_tab (id, data)
VALUES(SYS_GUID(),
'{
    "name": "Irene Palmer",
    "gender": "female",
    "company": "SPEEDBOLT",
    "email": "irenepalmer@speedbolt.com",
    "phone": "+1 (845) 436-2413",
    "address": "983 Roosevelt Place, Leyner, Illinois, 5767",
    "registered": "2017-02-14T09:51:25 -08:00",
    "latitude": 52.001456,
    "longitude": 161.045489,
    "friends": [
      {
        "id": 0,
        "name": "Chelsea Waller"
      },
      {
        "id": 1,
        "name": "Thomas Mccall"
      },
      {
        "id": 2,
        "name": "Booth Crawford"
      }
    ],
    "favoriteFruit": "apple"
  }');
  
INSERT INTO json_test_tab (id, data)
VALUES(SYS_GUID(),  
  '{
    "name": "Emma Mcdonald",
    "gender": "female",
    "company": "BYTREX",
    "email": "emmamcdonald@bytrex.com",
    "phone": "+1 (951) 413-2195",
    "address": "143 Arkansas Drive, Leola, Maryland, 5138",
    "registered": "2017-02-25T04:04:50 -08:00",
    "latitude": -28.083351,
    "longitude": 30.897873,
    "friends": [
      {
        "id": 0,
        "name": "Powers Turner"
      },
      {
        "id": 1,
        "name": "Hinton Delgado"
      },
      {
        "id": 2,
        "name": "Barrera Hutchinson"
      }
    ],
    "favoriteFruit": "banana"
  }');
  
INSERT INTO json_test_tab (id, data)
VALUES(SYS_GUID(),
'{
    "name": "Solis Rollins",
    "gender": "male",
    "company": "GROK",
    "email": "solisrollins@grok.com",
    "phone": "+1 (911) 439-3918",
    "address": "910 Bragg Court, Trail, Virginia, 3065",
    "registered": "2014-07-15T02:58:32 -08:00",
    "latitude": 37.970592,
    "longitude": -79.152205,
    "friends": [
      {
        "id": 0,
        "name": "Deborah Parrish"
      },
      {
        "id": 1,
        "name": "House Rich"
      },
      {
        "id": 2,
        "name": "Bennett Aguirre"
      }
    ],
    "favoriteFruit": "apple"
  }');
  
INSERT INTO json_test_tab (id, data)
VALUES(SYS_GUID(),
'{
    "name": "Dorthy Hoffman",
    "gender": "female",
    "company": "ARTIQ",
    "email": "dorthyhoffman@artiq.com",
    "phone": "+1 (806) 592-2352",
    "address": "257 Clarkson Avenue, Vowinckel, Virgin Islands, 1478",
    "registered": "2016-07-18T10:20:27 -08:00",
    "latitude": 34.322025,
    "longitude": 13.665359,
    "friends": [
      {
        "id": 0,
        "name": "Kristine Herrera"
      },
      {
        "id": 1,
        "name": "Branch Phillips"
      },
      {
        "id": 2,
        "name": "Wall Myers"
      }
    ],
    "favoriteFruit": "strawberry"
  }');
  
INSERT INTO json_test_tab (id, data)
VALUES(SYS_GUID(),
'{
    "name": "Medina Mcbride",
    "gender": "male",
    "company": "AVENETRO",
    "email": "medinamcbride@avenetro.com",
    "phone": "+1 (875) 470-2147",
    "address": "863 Ridgecrest Terrace, Rockbridge, Vermont, 366",
    "registered": "2014-11-03T08:32:50 -08:00",
    "latitude": 81.576249,
    "longitude": -41.531397,
    "friends": [
      {
        "id": 0,
        "name": "Angeline Powers"
      },
      {
        "id": 1,
        "name": "Mcdowell Perry"
      },
      {
        "id": 2,
        "name": "Luz Moody"
      }
    ],
    "favoriteFruit": "strawberry"
  }');
  
commit;

  
col name format a20
col gender format a10
col company format a20
col favoriteFruit format a30
select a.data.name as name,a.data.gender as gender,a.data.company as company, a.data.favoriteFruit as favoriteFruit
from json_test_tab a
order by 1;

>>

create or replace view vw_single_json_test_tab
as  
select jt.name,
       jt.gender,
       jt.company,
       jt.friends
from json_test_tab,
     JSON_TABLE(data, '$'
        COLUMNS (name varchar2(30) PATH '$.name',
                 gender varchar2(10) PATH '$.gender',
                 company varchar2(30) PATH '$.company',
                 friends varchar2(300) FORMAT JSON WITH WRAPPER PATH '$.friends' 
                )
               )jt
order by jt.name;

 

select * from vw_single_json_test_tab
>>

 
  
create or replace view vw_nested_json_test_tab
as  
select jt.name,
       jt.gender,
       jt.company,
       jt.friend_no,
       jt.friend_name
from json_test_tab,
     JSON_TABLE(data, '$'
        COLUMNS (name varchar2(30) PATH '$.name',
                 gender varchar2(10) PATH '$.gender',
                 company varchar2(30) PATH '$.company',
                 NESTED PATH '$.friends[*]' 
                        COLUMNS(friend_no number PATH '$.id',
                                friend_name varchar2(30) PATH '$.name'
                                )
                )       
               )jt
order by jt.name,jt.friend_no;

set linesize 120
set pagesize 100
col name format a20
col gender format a10
col company format a20
col friend_name format a30
break on name on gender on company
select * from vw_nested_json_test_tab;
>>


        
   

[Reference]
http://www.json-generator.com/
https://oracle-base.com/articles/12c/json-support-in-oracle-database-12cr1#creating-tables-to-hold-json

arrow
arrow
    全站熱搜

    DanBrother 發表在 痞客邦 留言(0) 人氣()