2012-03-02 62 views
2

我遇到执行此查询的问题。CONTAINS不适用于Oracle Text

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. 

一些谷歌上搜索我disovered这个问题可能是索引后,但是当我看了一下表和索引他们似乎确定了我。

创建索引脚本看上去就像是奇怪,我这个

CREATE INDEX FTSI_GOB_A_DOCUMENT 
ON GOB_ATTACHMENT (GOB_A_DOCUMENT) 
INDEXTYPE IS CTXSYS.CONTEXT; 

唯一的事情是,当我看向编辑在SQL开发人员表的属性表,我可以看到指数的那个工作状态为失败。有谁知道这是什么意思?也许数据库的权利?

而且它的工作,当我使用

dbms_lob.instr(gob_a_document, utl_raw.cast_to_raw('java')) > 0 

,而不是contains

感谢您的任何意见

附:它涉及到我刚才的问题Oracle DBMS_LOB.INSTR and CONTAINS performance

UPDATE

重新创建索引和一些玩耍,我disovered我可以执行上面的查询后,但它不会返回我什么。

如果我使用CONTAINS(gob_a_document, '%')进行尝试,结果是26行,不知道查询选择了哪个键(至少我没有发现任何明显的东西,我会更多地进行调查)。问题可能是,我们正在使用Oracle 10g和存储在从版本11

回答

4

支持docx文件“指数的工作状态为失败”

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

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

如果不明显,则会运行其他语句,因为它不会尝试使用您的CONTEXT索引。它正在艰难地进行搜索。


“的事情是,该指数在数据库已经建立,”

没有真实的东西是指数未能正确地创建,因此它的地位。您可能只是重建了索引,但通常先解决失败的根本原因通常会更好。这就是为什么我建议你放弃并重新创建。很明显,原来的故障是由于一些不再适用的环境条件造成的。


“现在的查询被执行,但它没有给我任何结果(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)

+0

事情是索引已经在数据库中创建,所以我在这里发布的脚本是从SQL开发人员复制和粘贴。所以我遵循了你的建议并重新创建了索引。现在查询被执行,但它没有给我任何结果(返回0行)。 (我相信它应该像100行一样返回) – 2012-03-02 10:17:50

+0

我们以各种格式(PDF,Word,HTML,...)存储文档。也是可能导致问题的DOCS。所以我的问题是,将存储不受支持的文档(DOCX)类型导致我的问题?该查询将不会返回任何内容?我们正在使用Oracle 10g和列的数据类型是BLOB – 2012-03-02 12:39:19

+0

将存储不受支持的文档类型(DOCX)导致你的问题?这当然是下注的方式。但是你需要自己调查一下,因为我没有10g的实例可以玩。 – APC 2012-03-02 13:20:49

相关问题