我怎样才能得到一个字符串分割结果的卡巴拉乘积,数组中的所有条目都是JSON对象中的键?这是我最接近答案的一次
SELECT REGEXP_SUBSTR(scp, '[^ ]+', 1, level), aud
FROM (SELECT scp, aud
FROM JSON_TABLE('{
"s": "s1 s2 s3",
"a": [
"a1",
"a2",
"a3"
]
}' FORMAT JSON,
'$[*]' COLUMNS(
scp VARCHAR2 PATH '$.s',
NESTED PATH '$.a[*]'
COLUMNS(
aud VARCHAR2 PATH '$[*]'
)
)
)
)
CONNECT BY REGEXP_SUBSTR(scp, '[^ ]+', 1, level) IS NOT NULL
但它只对a1
分解每个s
。我希望得到9个条目,Map每个s
到每个a
。如何通过一个JSON_TABLE
查询实现这一点?
1条答案
按热度按时间xienkqul1#
不能使用JSON函数拆分字符串。
您可以使用简单的字符串函数(比正则表达式快得多)和递归子查询分解子句拆分字符串:
在Oracle 12中,您还可以使用
CROSS APPLY
:两者输出:
| SCP| AUD|
| --|--|
| S1| A1|
| S1| A2|
| S1| A3|
| S2| A1|
| S2| A2|
| S2| A3|
| S3| A1|
| S3| A2|
| S3| A3|
fiddle