JSON_VALUE不能用於訪問文檔中多次出現的密鑰。例如,如果鍵或其父項是數組,則不能通過JSON_VALUE訪問內容,除非JSON_PATH表達式使用索引來標識數組的特定成員。
我們需要使用JSON_TABLE來解決這一個...
SQL> WITH A as
2 ( select 1 ID,
3 '{"arrays":[{"AAA":{"arrays":[{"BBB":{"fields":{"Name":"Max"}}},{"BBB":{"fields":{"Name":"Mike"}}}]}},{"AA
A":{"arrays":[{"BBB":{"fields":{"Name":"Mark"}}},{"BBB":{"fields":{"Name":"Matt"}}}]}}]}' BLOBFIELD
4 from DUAL
5 union all
6 select 2 ID,
7 '{"arrays":[{"AAA":{"arrays":[{"BBB":{"fields":{"Name":"Pat"}}},{"BBB":{"fields":{"Name":"Pete"}}}]}},{"AA
A":{"arrays":[{"BBB":{"fields":{"Name":"Paul"}}},{"BBB":{"fields":{"Name":"Pascal"}}}]}}]}' BLOBFIELD
8 from DUAL
9 )
10 SELECT distinct AP.ID
11 FROM A AP,
12 JSON_TABLE(
13 AP.BLOBFIELD,
14 '$.arrays[*]'
15 COLUMNS
16 NESTED PATH
17 '$.AAA.arrays[*]'
18 COLUMNS (
19 NAME VARCHAR2(32) PATH '$.BBB.fields.Name'
20 )
21 )
22 where NAME LIKE '%Pete%'
23
SQL> /
2
只是爲了保持完整性。
您沒有JSON_VALUE行的原因是默認的「NULL ON ERROR」行爲。這可以通過添加錯誤或錯誤條款可以看出以下
SQL> WITH A as
2 ( select 1 ID,
3 '{"arrays":[{"AAA":{"arrays":[{"BBB":{"fields":{"Name":"Max"}}},{"BBB":{"fields":{"Name":"Mike"}}}]}},{"AA
A":{"arrays":[{"BBB":{"fields":{"Name":"Mark"}}},{"BBB":{"fields":{"Name":"Matt"}}}]}}]}' BLOBFIELD
4 from DUAL
5 union all
6 select 2 ID,
7 '{"arrays":[{"AAA":{"arrays":[{"BBB":{"fields":{"Name":"Pat"}}},{"BBB":{"fields":{"Name":"Pete"}}}]}},{"AA
A":{"arrays":[{"BBB":{"fields":{"Name":"Paul"}}},{"BBB":{"fields":{"Name":"Pascal"}}}]}}]}' BLOBFIELD
8 from DUAL
9 )
10 SELECT AP.ID
11 FROM A AP
12 WHERE JSON_VALUE(
13 AP.BLOBFIELD format json,
14 '$.arrays.AAA.arrays.BBB.fields.Name'
15 ) LIKE 'peter%'
16/
no rows selected
SQL> WITH A as
2 ( select 1 ID,
3 '{"arrays":[{"AAA":{"arrays":[{"BBB":{"fields":{"Name":"Max"}}},{"BBB":{"fields":{"Name":"Mike"}}}]}},{"AA
A":{"arrays":[{"BBB":{"fields":{"Name":"Mark"}}},{"BBB":{"fields":{"Name":"Matt"}}}]}}]}' BLOBFIELD
4 from DUAL
5 union all
6 select 2 ID,
7 '{"arrays":[{"AAA":{"arrays":[{"BBB":{"fields":{"Name":"Pat"}}},{"BBB":{"fields":{"Name":"Pete"}}}]}},{"AA
A":{"arrays":[{"BBB":{"fields":{"Name":"Paul"}}},{"BBB":{"fields":{"Name":"Pascal"}}}]}}]}' BLOBFIELD
8 from DUAL
9 )
10 SELECT AP.ID
11 FROM A AP
12 WHERE JSON_VALUE(
13 AP.BLOBFIELD format json,
14 '$.arrays.AAA.arrays.BBB.fields.Name'
15 ERROR ON ERROR
16 ) LIKE 'peter%'
17/
FROM A AP
*
ERROR at line 11:
ORA-40470: JSON_VALUE evaluated to multiple values
SQL>
通過「不工作」待見,你的意思,你得到一個錯誤,或者只是沒有返回結果? – IMSoP
沒有結果返回 –
此鏈接http://stackoverflow.com/a/16301995/3377472顯示了一個例子。 –