SQL Contains: Убегать операторы консультации

У него был query функционируя с время (собранная JPA), когда он вдруг дал мне исключение:

org.springframework.web.util. NestedServletException: Request processing failed; nested exception is org.springframework.orm.hibernate3. HibernateJdbcException: JDBC exception on Hibernate восходит access: SQLException for SQL [n/a]; SQL state [99999]; ошибка code [29902]; could not extract ResultSet; nested exception is org.hibernate.exception. GenericJDBCException: could not extract ResultSet at org.springframework.web.servlet. FrameworkServlet.processRequest (FrameworkServlet.java:973)

Вкратце, он дает мне SQL state [99999]; ошибка code [29902]; что является проблемой в параметрах.

query, который собирается (в большие черты), и что дает проблемы, этот:

select * from mytabla where CONTAINS(campo1, 'BT');

После небольшого количества google фу я открыл, что Бритиш Телеком - оператор консультации contains и, как в этом случае он идет без параметров, которые он был бы должен, так как он дает pete.

Эта ошибка может размножаться ища NOT, DIFMERGE, ABOUT, AND. и много других, которые приходят в этом соединении.

Вопрос:

Есть какой-то способ "убегать" слово BT (или любая функция этих), для того, чтобы oracle думается, что это слово и не функция?


contains это собрал так:

return builder.greaterThan(
        builder.function("CONTAINS", Integer.class, exp, builder.literal(((String) param.getValue()).toUpperCase())),
        0);

EDIT: Из-за того, что я тестирую что-то я попытался кодировать в unicode слово Бритиш Телеком, но также не функционируй, дай ту же ошибку.

select * from myTabla WHERE CONTAINS (campo1, UNISTR ('\0042\0054'))> 0

3
задан 24.06.2017, 12:46
1 ответ

Потому что ты не тестируешь

> select * from myTabla WHERE campo1 like '%bt%'

, Это будет искать каждое сходное что-нибудь в этом роде в "bt"

1
ответ дан 24.11.2019, 13:23