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

相關問題