Запрос открытия фигурной скобки с запросами, использующими LIKE - PullRequest
0 голосов
/ 10 мая 2018

В нашем веб-приложении есть функция поиска, которая работает с Oracle (версия указана после Oracle10g), а я создаю запрос SQL с Java.

Согласно документации , все, что вы вводите в curly braces {..}, экранируется. Тем не менее, я хотел бы также выполнить поиск для {, и когда я пытаюсь найти строку, содержащую {, это дает мне ошибку org.hibernate.QueryException: Unmatched braces for alias path, так как она ищет закрывающую скобку.

То, что я пробовал до сих пор;

...query... WHERE ... LIKE lower('%{{%') ESCAPE '{'

...query... WHERE ... LIKE lower('%\{%') ESCAPE '\'

...query... WHERE ... LIKE lower('%{{}%')

...query... WHERE ... LIKE lower('%CHR(123)%')

...query... WHERE ... LIKE lower('%||CHR(123)||%')

Первые два по-прежнему вызывают ошибку. Другие не вызывают ошибок, но не возвращают результаты, содержащие {. Есть ли обходной путь для этой ситуации?

PS: я не могу использовать подготовленный оператор, так как в запросе есть части легенды. К сожалению, его нужно создавать вручную, используя строки.

PS2: с закрывающей скобкой проблем нет }

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

LIKE условие было создано без конкатенации строк

...query... WHERE ... LIKE lower('%||CHR(123)||%') -> ...query... WHERE ... LIKE ('%'||CHR(123)||'%')

Env, чтобы попробовать это

0 голосов
/ 10 мая 2018

Попробуйте использовать REGEXP_LIKE :

select * from (select 'some string contains {}' as msg from dual
 union select 'some string without curly braces' as msg from dual) t 
where REGEXP_LIKE(t.msg, '.*[{].*')

Результат: some string contains {}

Возможно, я написал неправильное регулярное выражение для вашего случая, но, по крайней мере, вы можете использовать его, чтобы найти любую строку, содержащую {

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...