2017-02-16 8 views
0

BLOBFIELD라는 BLOB 필드가있는 표가 하나 있습니다.JSON_VALUE (BLOB FIELD)의 ORACLE -LIKE 조건이 작동하지 않습니까?

이 : 나는 등호를 사용할 때

SELECT A.ID 
FROM A AP 
WHERE JSON_VALUE(
     AP.BLOBFIELD format json, 
     '$.arrays.AAA.arrays.BBB.fields.Name' 
     ) = 'peter' 

잘 작동합니다. 그러나이 : ​​

SELECT A.ID 
FROM A AP 
WHERE JSON_VALUE(
     AP.BLOBFIELD format json, 
     '$.arrays.AAA.arrays.BBB.fields.Name' 
     ) LIKE 'peter%' 

과 :

SELECT A.ID 
FROM A AP 
WHERE (JSON_VALUE(
     AP.BLOBFIELD format json, 
     '$.arrays.AAA.arrays.BBB.fields.Name' 
     )) LIKE '%peter%' 

을 나는하지는 오류가 있지만, 나는 그것이 AAA와 BBB 내가 regex_like 발견
배열이기 때문에 작동하지 않을 수 있다고 생각하지만,이 기능 등을받을 먼저 필드 값을 입력하십시오. 그러나 필드에는 json 경로가 없습니다.

SELECT A.ID FROM A AP 
WHERE JSON_VALUE(AP.BLOBFIELD format json, '$.arrays.AAA[*].arrays.BBB[*].fields.Name' ERROR ON ERROR) LIKE 'peter%' 

이 작동하지 않습니다. LIKE을 사용하려면 어떻게 작동합니까?

+1

"작동하지 않음"이란 오류가 발생했거나 결과가 반환되지 않는다는 의미입니까? – IMSoP

+0

결과가 없습니다. –

+0

이 링크 http://stackoverflow.com/a/16301995/3377472 예제를 보여줍니다. –

답변

0

나는 LIKE를 사용하여 JSON_VALUE를 돌렸고 완벽하게 작동했습니다. 필자는 12.1.0.2 RELEASE 이상 버전에서 테스트를 마쳤습니다. JSON_VALUE에서 ERROR ON ERROR 절을 사용하면 어떻게됩니까?

선택 AP WHERE JSON_VALUE ( AP.BLOBFIELD 포맷 인 JSON ERROR ON '$ .arrays.AAA.arrays.BBB.fields.Name'ERROR) LIKE '베드로 %'

FROM A.ID

오류가 표시됩니까?

+0

오류가 없지만 AAA와 BBB는 배열 예제이므로 작동하지 않는다고 생각합니다. JSON_VALUE (AP.BLOBFIELD 형식 json, '$ .arrays.AAA [*]. arrays.BBB [*]. fields.Name'ERROR ON ERROR)와 같은 AP에서 SELECT A.ID LIKE 'peter %' –

1

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>