2013-09-12 6 views
1

Итак, у меня есть webapp, который принимает строку, в которой идентификационные элементы разбиты на «-» (например, someid1-someid2). Затем я конвертирую строку в нечто вроде someid1 OR someid2. Это в теории, согласно Oracle's doc's должны позволить мне тогда сделать что-то вродеOracle CONTAINS Предоставление недопустимого идентификатора ORA-00904

SELECT somecol1, somecol2 FROM sometable WHERE CONTAINS (somecol1, 'someid1 OR someid2') > 0; 

Однако я получаю следующее сообщение об ошибке при выполнении запроса выборки в SQL Dev:

ORA-00904: "CONTAINS": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:

Версия Oracle является Oracle9i Enterprise Edition Release 9.2.0.5.0 - Production, для которого предназначена документация, поэтому я не понимаю, почему CONTAINS будет считаться недопустимым идентификатором. Добавление другого необязательного параметра

SELECT somecol1, somecol2 FROM sometable WHERE CONTAINS (somecol1, 'someid1 OR someid2', 1) > 0; 

также дает такую ​​же ошибку. Что я здесь делаю неправильно?

EDIT:
'Рабочий код' по желанию, хотя, возможно, он не работает

SELECT tech, product FROM tech_det_view WHERE CONTAINS (tech, 'test OR qual') > 0; 
+0

Это выглядит хорошо, но я думаю, что это поддельный код. Не могли бы вы включить рабочий код? – Parado

+2

Кто-то собирается это сказать; расширенная поддержка на 9,2 закончилась более 7 лет назад. Рассматривали ли вы обновление? – Ben

+0

Я всего лишь скромный стажер; Я сомневаюсь, что у меня есть влияние на корпорацию или можно было бы оправдать то, что все БД были обновлены до чего-то нового, особенно с тех пор, как 9.2 поддерживает CONTAINS –

ответ

3

Вы должны создать oracle text index перед использованием CONTAINS функции

CREATE INDEX idxName ON tableName(columnName) INDEXTYPE IS CTXSYS.CONTEXT; 

Here вам можно найти дополнительную информацию о Ora cle Текст.

+0

'Отчет об ошибке: Ошибка SQL: ORA-01702: здесь нет нужды 01702. 00000 -« вид здесь не подходит »' Итак, я беру его, я индексирую столбец/таблицу, с которой на самом деле открывается вид? Или я по-прежнему получаю предыдущую ошибку индекса, потому что мой фактический запрос вытягивается из представления? –

+0

@ KurtWagner Ah 'tech_det_view' это вид ?! Не могли бы вы включить тело представления? Или скажите мне, в какой таблице у вас есть столбец «tech»? – Parado

+0

Похоже, вы обновили свой ответ. Я изменился на таблицу/col ref'd в представлении, и в настоящее время я сталкиваюсь с проблемами с привилегиями, несмотря на то, что это макет. Если он исправляет проблему, в худшем случае я могу просто запустить SQL-запрос в среде mock для использования функции CONTAINS (если она не работает в процессе производства) и ссылки на производственные данные. Я уверен, что это индексирование - это ответ, но я помечаю его как таковой, как только получаю привилегии и могу его проиндексировать, чтобы подтвердить! –