2

我在执行此查询时遇到问题。

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 文件。

4

1 回答 1

4

“索引的操作状态失败”

好的,这意味着您的 CREATE INDEX 语句失败。你收到错误信息了吗?我想答案是肯定的,但你错过了。所以你需要做的是:

  • 删除索引
  • 重新运行 CREATE INDEX 语句
  • 如果它抛出错误,请记下原因并修复它

如果不明显,另一个语句会运行,因为它没有尝试使用您的 CONTEXT 索引。它正在艰难地进行搜索。


“问题是索引已经在 DB 中创建,”

没有真正的事情是索引未能正确创建,因此它的状态。您可能只是重建了索引,但通常最好先修复失败的根本原因。这就是为什么我建议你放弃并重新创建。显然,最初的故障是由于某些不再适用的环境条件造成的。


“现在执行了查询,但它没有给我任何结果(返回 0 行)。(我确信它应该返回 100 行)”

这听起来像是您以二进制格式存储文档。什么样的文件?它们的格式是否受支持?这取决于您使用的 Oracle 版本。例如, Oracle Text 10g 支持 Word 2003(即仅 DOC),而Oracle Text 11g 支持 Word 2007(即 DOCX)

于 2012-03-02T10:01:43.347 回答