我在执行此查询时遇到问题。
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中查看Table属性中的Edit Table时,我可以看到索引的Operational Status是FAILED。有谁知道这是什么意思?也许数据库权利?
当我使用
时,它也正常工作dbms_lob.instr(gob_a_document, utl_raw.cast_to_raw('java')) > 0
而不是contains
感谢您的任何建议
P.S。这与我上一个问题Oracle DBMS_LOB.INSTR and CONTAINS performance
有关更新
在重新创建索引和一些游戏后,我发现我可以执行上面的查询,但它不会返回任何东西。
如果我使用CONTAINS(gob_a_document, '%')
进行尝试,结果是26行,并且不知道查询选择了哪个键(至少我没有找到任何明显的,我会更多地研究它)。问题可能在于我们使用的是Oracle 10g并存储了版本11支持的DOCX文件。
答案 0 :(得分:4)
"指数的运作状态为FAILED"
好的,这意味着您的CREATE INDEX语句失败。你收到错误信息了吗?我想答案是肯定的,但你错过了。所以你需要做的是:
如果不明显,另一个语句会运行,因为它没有尝试使用您的CONTEXT索引。它正在艰难地进行搜索。
"事情是索引已经在DB中创建,"
索引无法正确创建,因此其状态是真实的。您可以重建索引,但通常最好先修复失败的根本原因。这就是我建议你放弃并重新创建的原因。显然,最初的失败是由于一些不再适用的环境条件造成的。
"现在执行查询,但它没有给我任何结果(0行 回)。 (我确信它应该返回100行)"
这听起来像是以二进制格式存储文档。什么样的文件?它们是否支持格式?这取决于您使用的Oracle版本。例如,Oracle Text 10g supports up t Word 2003 (i.e. DOC only)而Oracle Text 11g supports Word 2007 (i.e. DOCX as well)。