JSON_VALUE는 문서에서 두 번 이상 나타나는 키에 액세스하는 데 사용할 수 없습니다. 예를 들어 키 또는 부모 중 하나가 배열 인 경우 JSON_PATH 표현식에서 인덱스를 사용하여 배열의 특정 멤버를 식별하지 않으면 JSON_VALUE를 통해 내용에 액세스 할 수 없습니다.
우리는 ... 그냥 완전성에 대한
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_TABLE를 사용해야합니다.
JSON_VALUE 행이없는 이유는 기본 "NULL ON ERROR"동작입니다. 아래에서 볼 수있는 바와 같이 ERROR 또는 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 예제를 보여줍니다. –