powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / странно работает or, and и json
6 сообщений из 6, страница 1 из 1
странно работает or, and и json
    #39302755
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
народ, может я что-то не догоняю, но 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
странно работает or, and и json
    #39302784
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
странно работает or, and и json
    #39302793
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
обидно, что последние 2 json бандла патча не помогли
...
Рейтинг: 0 / 0
странно работает or, and и json
    #39302814
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
странно работает or, and и json
    #39302818
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вернее, что-бы точно воспроизвести изначальный 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
странно работает or, and и json
    #39302876
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Круто, спасибо!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / странно работает or, and и json
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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