Разобрать зарезервированные символы в текстовом поиске/запросе Oracle?

Я разрабатываю веб-приложение, и в нем есть страница поиска с возможностью полнотекстового поиска (я создал индекс CONTEXT для интересующих меня текстовых столбцов). С помощью Oracle вы можете выполнить запрос CONTAINS, который запускает полнотекстовый поиск и возвращает вам результаты - это здорово, за исключением случаев, когда вы вводите зарезервированный символ, например:

"лед* И места И Аляска"

тот факт, что вы поместили «*» после «льда», приведет к ошибке Oracle, т.е.

ORA-29902: error in executing ODCIIndexStart() routine
ORA-20000: Oracle Text error:

Каков самый изящный способ избежать этого - я знаю, что вы можете отфильтровать зарезервированные символы и ключевые слова, - но я бы подумал, что будет более элегантный способ. Если вы знаете о такой вещи, мне было бы очень интересно узнать :-)


ПРИМЕЧАНИЕ. Вот код, который запускает текстовый поиск Oracle, ничего особенного:

 OracleCommand cmd = new OracleCommand("SELECT ref_id, title, table_name, description FROM v_all_media WHERE CONTAINS (title, :pTitle) > 0", conn);
 cmd.Parameters.Add("pTitle", title);
 OracleDataReader reader = cmd.ExecuteReader();

person Vidar    schedule 15.02.2013    source источник


Ответы (1)


{}

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

Когда вы используете фигурные скобки для экранирования одного символа, экранированный символ становится отдельным токеном в запросе.

\

Используйте символ обратной косой черты, чтобы экранировать один символ или символ. Экранируется только символ, следующий за обратной косой чертой.

См. раздел Специальные символы в запросах.

person Tomasz    schedule 16.02.2013