簡體   English   中英

如何將JSON格式的oracle表行值轉換為多個關系COLUMNS?

[英]How to convert JSON format oracle table row values into multiple relational COLUMNS?

我有一個由MQ加載的oracle表,其中一個表列具有JSON格式數據的值。我需要將這些JSON格式數據轉換為關系行格式。 我想知道在oracle中是否有任何SQL創建臨時表以將這些JSON格式數據轉換為關系列值?

Select JSON_MG from test_1;

JSON_MG
{
  "type": "testeevnet",
  "version": "test-1.0",
  "testsource": "1.0.0",
  "timestamp": "2019-02-14T20:45:18.4422201+00:00",
  "test_ID": 11,
  "tag": "22",
  "PNAME": "test/test_n",
  "ticket": "WT9999",
  "ticketStatus": "active",
  "tickets": [
    {
      "ticket": "convert",
      "code": "PA",
      "date": "2019-03-31"
    }
    }
  ]
}

- 預期結果將所有JSON元素作為列

json_table是你要找的。 這可以做JSON - >關系轉換。

只需列出要提取的元素的路徑及其數據類型:

with jdata as (
  select '{
  "type": "testeevnet",
  "version": "test-1.0",
  "testsource": "1.0.0",
  "timestamp": "2019-02-14T20:45:18.4422201+00:00",
  "test_ID": 11,
  "tag": "22",
  "PNAME": "test/test_n",
  "ticket": "WT9999",
  "ticketStatus": "active",
  "tickets": [
    {
      "ticket": "convert",
      "code": "PA",
      "date": "2019-03-31"
    }
  ]
}' doc
  from dual
)
  select t.* 
  from   jdata, json_table (
    doc, '$'
    columns (
      type    varchar2 path '$.type',
      version varchar2 path '$.version',
      nested  path '$.tickets[*]' 
      columns (
        ticket varchar2 path '$.ticket'
      )
    )
  ) t;

TYPE         VERSION    TICKET    
testeevnet   test-1.0   convert   

nested path將數組元素拆分為行。 因此,當您在票證數組中添加更多對象時,它們將成為行:

with jdata as (
  select '{
  "type": "testeevnet",
  "version": "test-1.0",
  "testsource": "1.0.0",
  "timestamp": "2019-02-14T20:45:18.4422201+00:00",
  "test_ID": 11,
  "tag": "22",
  "PNAME": "test/test_n",
  "ticket": "WT9999",
  "ticketStatus": "active",
  "tickets": [
    {
      "ticket": "convert",
      "code": "PA",
      "date": "2019-03-31"
    },
    {
      "ticket": "convert2",
      "code": "PA",
      "date": "2019-03-31"
    }
  ]
}' doc
  from dual
)
  select t.* 
  from   jdata, json_table (
    doc, '$'
    columns (
      type    varchar2 path '$.type',
      version varchar2 path '$.version',
      nested  path '$.tickets[*]' 
      columns (
        ticket varchar2 path '$.ticket'
      )
    )
  ) t;

TYPE         VERSION    TICKET     
testeevnet   test-1.0   convert     
testeevnet   test-1.0   convert2 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM