我在执行此查询时遇到问题。
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.
经过一番谷歌搜索后,我发现问题可能出在索引中,但是当我查看表格和索引时,它们对我来说似乎没问题。
为索引创建脚本看起来像这样
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 and CONTAINS performance
更新
在重新创建索引和一些玩弄之后,我发现我可以执行上面的查询,但它不会返回任何东西。
如果我尝试使用CONTAINS(gob_a_document, '%')
,结果是 26 行,并且不知道查询通过哪个键选择了它们(至少我没有发现任何明显的东西,我会进一步调查)。问题可能在于我们正在使用 Oracle 10g 并存储版本 11 支持的 DOCX 文件。