У меня проблема с выполнением этого запроса.
SELECT * FROM gob_attachment
WHERE CONTAINS (gob_a_document, 'java') > 0
Это дает мне
ORA-29902: error in executing ODCIIndexStart() routine
ORA-20000: Oracle Text error:
ORA-00942: table or view does not exist
29902. 00000 - "error in executing ODCIIndexStart() routine"
*Cause: The execution of ODCIIndexStart routine caused an error.
*Action: Examine the error messages produced by the indextype code and
take appropriate action.
После некоторого поиска в Google я обнаружил, что проблема может быть в индексе, но когда япосмотрел на таблицу и индекс, они показались мне нормальными.
Создание сценария для индекса выглядит следующим образом
CREATE INDEX FTSI_GOB_A_DOCUMENT
ON GOB_ATTACHMENT (GOB_A_DOCUMENT)
INDEXTYPE IS CTXSYS.CONTEXT;
Единственное, что мне странно, это то, что когда я смотрю на Редактировать таблицув свойствах таблицы в SQL Developer я вижу, что операционный статус индекса НЕ УКАЗАН.Кто-нибудь знает, что это значит? Может быть, права БД?
Также работает, когда я использую
dbms_lob.instr(gob_a_document, utl_raw.cast_to_raw('java')) > 0
вместо contains
Спасибо за любой совет
PS Это связано с моим предыдущим вопросом Oracle DBMS_LOB.INSTR и СОДЕРЖИТ производительность
ОБНОВЛЕНИЕ
После воссоздания индекса и некоторого воспроизведенияЯ обнаружил, что могу выполнить запрос выше, но он ничего мне не вернет.
Если я попробую с CONTAINS(gob_a_document, '%')
, результат будет 26 строк, и я не знаю, по какому ключу их выбрал запрос (по крайней мере, я не нашел ничего очевидного, я исследую его подробнее),Проблема может заключаться в том, что мы используем Oracle 10g и храним файлы DOCX, которые поддерживаются с версии 11.