【发布时间】:2021-05-26 07:52:06
【问题描述】:
有一个请求例如:
with j (sJson) as (
select '{
"ID":"1444284517",
"ID_ORD":"4255;2187606199",
"Vals":{
"CODE":"ONB2B3BB8",
"DORD":"25.04.2021"
}
}'
from dual
)
select jt.*
from j
cross apply json_table (j.sJson, '$'
columns
ID varchar2(32) path '$.ID',
ID_ORD varchar2(32) path '$.ID_ORD',
nested path '$.Vals[*]'
columns (
CODE varchar2(9) path '$.CODE',
DORD varchar2(30) path '$.DORD',
....
)) jt
column 中可能有不同的字段。
如何在不指定类型和路径的情况下列出columns 中的所有字段?那是如何使它成为动态解析器呢?需要放弃CODE varchar2(9) path '$.CODE'
我期待这个结果:
| ID | ID_ORD | CODE | DORD |
+------------+-----------------+-----------+------------+
| 1444284517 | 4255;2187606199 | ONB2B3BB8 | 25.04.2021 |
【问题讨论】:
-
请编辑您的问题以显示您想要从该示例中获得的输出;并取决于您所说的动态,不同的示例及其预期输出。
-
@AlexPoole,我改了问题
-
列中可能有不定数量的字段{ }
-
在执行查询之前必须知道输出列的数量,所以我认为这可能与静态 SQL 无关。 (它在概念上类似于具有未知列数的枢轴。)动态 SQL 必须通过解析 JSON 来构建
columns子句,这似乎有点痛苦。
标签: sql json oracle parsing oracle18c