Oracle中使用JSON_TABLE提取API响应车辆名称失败求助
解决Oracle JSON_TABLE无法提取动态车辆标识的问题
你的问题出在JSON路径的上下文错误:原代码用$.*[*]直接遍历所有事件对象,但丢失了外层的车辆标识键(比如CAR-1)。因为进入数组[*]后,当前上下文变成了单个事件对象,无法回溯到外层的键名。
正确的做法是用嵌套JSON_TABLE,先遍历顶层的键值对拿到车辆名称,再遍历对应数组提取事件详情:
INSERT INTO car_event_table (car_name, event_state, event_timestamp) SELECT jt1.car_name, jt2.event_state, jt2.event_timestamp FROM JSON_TABLE(l_response, '$.*' COLUMNS( car_name VARCHAR2 PATH '$.key', -- 获取顶层键名作为车辆名称 NESTED PATH '$[*]' -- 遍历当前键对应的事件数组 COLUMNS( event_state VARCHAR2 PATH '$.state', event_timestamp NUMBER PATH '$.timestamp' ) jt2 ) jt1;
代码说明:
- 第一层
JSON_TABLE用$.*遍历顶层所有键值对,通过$.key获取每个键的名称(即CAR-1、CAR-13这类标识)。 - 用
NESTED PATH '$[*]'进入每个键对应的事件数组,遍历数组中的每个事件对象,提取state和timestamp。 - 最终将车辆名称和对应的事件信息关联起来,插入到目标表中。
用你的示例JSON测试,会生成两条符合预期的记录:
- CAR-1 | waiting | 1720476000
- CAR-13 | delivery | 1720476000
内容的提问来源于stack exchange,提问作者Timo
相关产品推荐
相关产品推荐

