json_table()
を使用できます JSON値をリレーショナル表現に変換します。これは、MERGEステートメント内で使用できます。
例えば。次のクエリ:
select j.*
from itv_dev_logs
cross join json_table(log_clob, '$.data.routedStops[*]'
columns 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 number path '$.routingInfo.stopTime'
) j
where 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ステートメントのソースとして使用できます。
merge into your_target_table tg
using (
select j.*
from itv_dev_logs
cross join json_table(log_clob, '$.data.routedStops[*]'
columns 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 number path '$.routingInfo.stopTime'
) j
where log_id = 1435334
) t on (t.stop_id = tg.stop_id and ... more join conditions ...)
when matched then update
set stop_nr = t.info_stop_nr,
eta_timestamp = t.eta_dt,
ターゲットの構造も、どのJSONキーをどのテーブル列に一致させる必要があるかについての情報も提供していないため、すべての列名は単なる推測であり、正しい名前に置き換える必要があります。