[英]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.