Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / странно работает or, and и json / 6 сообщений из 6, страница 1 из 1
02.09.2016, 15:08:11
    #39302755
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
странно работает or, and и json
народ, может я что-то не догоняю, но json_textcontains работает как-то странно.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
create table json_data(id number, js clob)
/
insert into json_data values(1, '{"values":[{"key":[{"name":"id","value":"5"}]}]}')
/
CREATE INDEX json_docs_search_idx ON json_data(js)
  INDEXTYPE IS CTXSYS.CONTEXT
  PARAMETERS ('section group CTXSYS.JSON_SECTION_GROUP SYNC (ON COMMIT)');



Запрос вида

Код: plsql
1.
2.
3.
select *
from json_data
where (json_textcontains(js, '$.values.key.value', '5') or json_textcontains(js, '$.values.key.value', '3'))



возвращает одну строку

Код: plsql
1.
2.
3.
select *
from json_data
where json_textcontains(js, '$.values.key.name', 'id') and (json_textcontains(js, '$.values.key.value', '5') or json_textcontains(js, '$.values.key.value', '3'))



не возвращает ничего, а

Код: plsql
1.
2.
3.
select *
from json_data
where json_textcontains(js, '$.values.key.name', 'id') 



возвращает одну

это замысел или я чего-то не догоняю?
...
Рейтинг: 0 / 0
02.09.2016, 15:39:16
    #39302784
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
странно работает or, and и json
Shtock,


Явный баг:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
variable c clob
begin
    dbms_utility.expand_sql_text(q'[
select  *
  from  json_data
  where json_textcontains(js, '$.values.key.name', 'id')
    and (
            json_textcontains(js, '$.values.key.value', '5')
         or
            json_textcontains(js, '$.values.key.value', '3')
        )
]',:c);
end;
/
print c


SELECT  "A1"."ID" "ID",
        "A1"."JS" "JS"
  FROM  "SCOTT"."JSON_DATA" "A1"
  WHERE 0 = 1
    AND (
            0 = 1
         OR
            "CTXSYS"."CONTAINS"(
                                "A1"."JS",
                                '   ({id} INPATH(/values/key/name))
                                 or (({5} INPATH(/values/key/value))
                                 or ({3} INPATH(/values/key/value)))'
                               ) > 0
        )
/



SY.
...
Рейтинг: 0 / 0
02.09.2016, 15:48:11
    #39302793
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
странно работает or, and и json
обидно, что последние 2 json бандла патча не помогли
...
Рейтинг: 0 / 0
02.09.2016, 16:18:35
    #39302814
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
странно работает or, and и json
Shtockобидно, что последние 2 json бандла патча не помогли

Открой SR на MOS. А пока пользуйся подсказкой от dbms_utility.expand_sql_text:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SQL> SELECT  *
  2    FROM  JSON_DATA
  3    WHERE CONTAINS(
  4                   JS,
  5                   '   ({id} INPATH(/values/key/name))
  6                    or
  7                       (({5} INPATH(/values/key/value))
  8                    or
  9                       ({3} INPATH(/values/key/value)))'
 10                  ) > 0
 11  /

        ID JS
---------- ------------------------------------------------
         1 {"values":[{"key":[{"name":"id","value":"5"}]}]}

SQL> 



SY.
...
Рейтинг: 0 / 0
02.09.2016, 16:22:22
    #39302818
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
странно работает or, and и json
Вернее, что-бы точно воспроизвести изначальный WHERE

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SELECT  *
  FROM  JSON_DATA
  WHERE CONTAINS(
                 JS,
                 '    ({id} INPATH(/values/key/name))
                  and (
                          (({5} INPATH(/values/key/value))
                       or
                          ({3} INPATH(/values/key/value)))
                      )'
                ) > 0
/

        ID JS
---------- -------------------------------------------------
         1 {"values":[{"key":[{"name":"id","value":"5"}]}]}

SQL> 



SY.
...
Рейтинг: 0 / 0
02.09.2016, 17:58:47
    #39302876
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
странно работает or, and и json
Круто, спасибо!
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / странно работает or, and и json / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]