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