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のテーブルプロパティでテーブルを編集すると、インデックスの動作ステータスが失敗していることがわかることだけです。誰かがそれが何を意味するのか知っていますか?多分DB権?

また、使用すると動作します

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

それ以外のcontains

アドバイスありがとうございます

PSこれは私の前の質問に関連していますOracleDBMS_LOB.INSTRおよびCONTAINSパフォーマンス

アップデート

インデックスを再作成して遊んだ後、上記のクエリを実行できることに気づきましたが、何も返されません。

で試してみるとCONTAINS(gob_a_document, '%')、結果は26行であり、クエリがそれらを選択したキーがわかりません(少なくとも、明らかなものは見つかりませんでした。さらに調査します)。問題は、Oracle 10gを使用していて、バージョン11からサポートされているDOCXファイルを保存していることである可能性があります。

4

1 に答える 1

4

「インデックスの動作ステータスが失敗しました」

さて、これは、CREATEINDEXステートメントが失敗したことを意味します。エラーメッセージが表示されましたか?答えはイエスだと思いますが、あなたはそれを見逃しました。したがって、あなたがする必要があるのは:

  • インデックスを削除します
  • CREATEINDEXステートメントを再実行します
  • エラーが発生した場合は、理由をメモして修正してください

明らかでない場合は、CONTEXTインデックスを使用しようとしていないため、他のステートメントが実行されます。それは難しい方法で検索を行っています。


「問題は、インデックスがすでにDBで作成されていることでした。」

本当のことは、インデックスが適切に作成できなかったこと、つまりそのステータスでした。インデックスを再構築することもできますが、通常は、障害の根本的な原因を最初に修正することをお勧めします。そのため、ドロップして再作成することをお勧めしました。明らかに、元の障害は、適用されなくなった周囲条件が原因でした。


「これでクエリが実行されましたが、結果が得られません(0行が返されます)(100行のように返されるはずです)」

つまり、ドキュメントをバイナリ形式で保存しているように聞こえます。どんな書類?それらはサポートされている形式ですか?これは、使用しているOracleのバージョンによって異なります。たとえば、 Oracle Text10gは最大でWord2003(つまり、DOCのみ)をサポートしますが、Oracle Text11gはWord2007(つまり、DOCXも)をサポートします

于 2012-03-02T10:01:43.347 に答える