Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да анализирате ефективно json в Oracle 18c?

Можете да използвате json_table() за да превърнете JSON стойността в релационно представяне. Това от своя страна може да се използва в оператор MERGE.

напр. следната заявка:

изберете j.*from itv_dev_logs cross join json_table(log_clob, '$.data.routedStops[*]' колони stop_id integer path '$.stopId', zone_ltf integer path '$.zoneLTF', info_stop_nr integer path '$.routingInfo.stop', info_route_ref varchar(20) път '$.routingInfo.routeRef', info_eta varchar(20) път '$.routingInfo.eta', info_eta_dt времеви път път '$.routingInfo.etaDateTime', info_stop_time номер път '$.routingInfo.stopTime' ) jкъдето log_id =1435334; 

Връща нещо подобно:

<предварителен код>STOP_ID | ZONE_LTF | INFO_STOP_NR | INFO_ROUTE_REF | INFO_ETA | INFO_ETA_DT | INFO_STOP_TIME | INFO_DIST_PREV_STOP | INFO_BREAK_TIME | INFO_BREAK_DURATION--------------+----------+--------------+-------- --------+----------+---------------+---- ------------+--------------------+-------------- --+--------------------1554383571432 | 1 | 1 | R119 | 11:01 | 2019-04-16 11:01:00.000 | 0,08 | 0,27 | 00:00 | 00:00 1554383571515 | 1 | 2 | R119 | 11:07 | 2019-04-16 11:07:00.000 | 0,08 | 0,34 | 00:00 | 00:00 1554383571601 | 1 | 3 | R119 | 11:13 | 2019-04-16 11:13:00.000 | 0,08 | 0 | 00:00 | 00:00 1554383571671 | 1 | 4 | R119 | 11:19 | 2019-04-16 11:19:00.000 | 0,08 | 0 | 00:00 | 00:00 1554383571739 | 1 | 5 | R119 | 11:25 | 2019-04-16 11:25:00.000 | 0,08 | 0 | 00:00 | 00:00

Това може да се използва като източник на оператор MERGE за актуализиране на вашата целева таблица:

сливане във your_target_table tgusing ( изберете j.* от itv_dev_logs cross join json_table(log_clob, '$.data.routedStops[*]' колони stop_id integer path '$.stopId', zone_ltf integer path '$.zoneLTF ', info_stop_nr integer path '$.routingInfo.stop', info_route_ref varchar(20) path '$.routingInfo.routeRef', info_eta varchar(20) path '$.routingInfo.eta', info_eta_dt timestamp path '$.routingInfo.etaDateTime ', info_stop_time номер път '$.routingInfo.stopTime' ) j където log_id =1435334) t on (t.stop_id =tg.stop_id и ... още условия за присъединяване ...)когато съвпаднат, тогава актуализирайте set stop_nr =t.info_stop_nr , eta_timestamp =t.eta_dt,  

Тъй като нито сте предоставили структурата на целта, нито информацията кои JSON ключове трябва да съответстват на кои колони на таблицата, всички имена на колони са само предположения и трябва да ги замените с правилните имена.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как да прехвърляте CLOB данни от една база данни към друга отдалечена база данни ORACLE, имаща DBLinks

  2. Анонимен тип TABLE или VARRAY в Oracle

  3. Незаконно използване на тип данни LONG Oracle

  4. Вземете дума след конкретна дума с помощта на regexp_substr в sql oracle

  5. Oracle получава ред, където се променя стойността на колоната