#oracle
Вопрос:
У меня есть таблица данных в базе данных oracle с одним столбцом json blob. Данные представлены в следующей структуре json.
{
"type_a": [
{
"line_item_a": {
"cost": 1284,
"discount": null
},
"line_item_b": {
"cost": 1284,
"discount": null
},
"line_item_c": {
"cost": 1284,
"discount": null
},
"line_item_d": {
"cost": 1284,
"discount": null
}
}
],
"type_b": [
{
"line_item_a": {
"cost": 1284,
"discount": null
},
"line_item_b": {
"cost": 1284,
"discount": null
},
"line_item_c": {
"cost": 1284,
"discount": null
},
"line_item_d": {
"cost": 1284,
"discount": null
}
}
],
"type_c": [
{
"line_item_a": {
"cost": 1284,
"discount": null
},
"line_item_b": {
"cost": 1284,
"discount": null
},
"line_item_c": {
"cost": 1284,
"discount": null
},
"line_item_d": {
"cost": 1284,
"discount": null
}
}
],
"customerId": "8E7A44BA8CE6BF76D09497246C5246FB",
"priceType": {
"id": 1,
"selected": false,
"text": "Corporate"
}
}
Я пытаюсь прочитать значения в этом столбце со следующей структурой;
строка_итем_а | line_item_b | line_item_c |
---|---|---|
стоимость(тип_а) стоимость(тип_в) стоимость(тип_с) | стоимость(тип_а) стоимость(тип_в) стоимость(тип_с) | стоимость(тип_а) стоимость(тип_в) стоимость(тип_с) |
Не могли бы вы, пожалуйста, помочь мне сформулировать запрос для этого?
Комментарии:
1. Формула одинакова для всех столбцов. Это опечатка? Вам нужен фиксированный вывод (a, b и c, несмотря на наличие d, для примера)?
Ответ №1:
Ну, это не изящное решение, но вот очень простой способ сделать это с помощью JSON_TABLE.
Предполагая, что ваша таблица называется MY_TABLE с json blob col JSON_COL.
select jt.customer_id,
(li_a_type_a li_a_type_b li_a_type_c) as line_item_a,
(li_b_type_a li_b_type_b li_b_type_c) as line_item_b,
(li_c_type_a li_c_type_b li_c_type_c) as line_item_c
from my_table t
cross join json_table(t.json_col, '
Комментарии:
1. спасибо @kfinity; это хороший прогресс. что мне делать, если номер позиции не фиксирован?
COLUMNS (
customer_id varchar2(50 char) PATH '$.customerId',
li_a_type_a number PATH '$.type_a.line_item_a.cost',
li_b_type_a number PATH '$.type_a.line_item_b.cost',
li_c_type_a number PATH '$.type_a.line_item_c.cost',
li_d_type_a number PATH '$.type_a.line_item_d.cost',
li_a_type_b number PATH '$.type_b.line_item_a.cost',
li_b_type_b number PATH '$.type_b.line_item_b.cost',
li_c_type_b number PATH '$.type_b.line_item_c.cost',
li_d_type_b number PATH '$.type_b.line_item_d.cost',
li_a_type_c number PATH '$.type_c.line_item_a.cost',
li_b_type_c number PATH '$.type_c.line_item_b.cost',
li_c_type_c number PATH '$.type_c.line_item_c.cost',
li_d_type_c number PATH '$.type_c.line_item_d.cost'
)) as jt
;
Комментарии:
1. спасибо @kfinity; это хороший прогресс. что мне делать, если номер позиции не фиксирован?