4000 文字の制限は任意の境界ではなく、Oracle SQL が処理できる VARCHAR2 文字の最大量です。
4000文字は大量のテキストです。英語で約 600 ワード、または A4 ページと適度なポイント フォントのビットです。これほど大量の言葉遣いを検索する必要があるアプリケーションは、私が思いつく限り多くはありません。学生のエッセイの剽窃をチェックする大学でさえ、パラグラフ レベルにとどまります。
ただし、わずか 4000 文字での一致が誤検知を生成する状況が実際にある場合は、クエリ文字列をチャンクに分割して検索するしかありません。これは、PL/SQL を使用する必要があることを意味します。
create or replace function big_search (p_search_text in varchar2)
return sys_refcursor
is
return_value sys_refcursor;
p_srch1 varchar2(4000);
p_srch2 varchar2(4000);
begin
dbms_output.put_line('search_length='||to_char(length(p_search_text)));
p_srch1 := substr(p_search_text, 1, 4000);
p_srch2 := substr(p_search_text, 4001, 4000);
open return_value for
select docname
, (score(1) + score(2))/2 as score
from t23
where contains ( text_column, p_srch1 , 1) != 0
and contains ( text_column, p_srch2 , 2) != 0;
return return_value;
end;
/
検索テキストのサイズが事前にわからない場合は、動的 SQL を使用してこれを組み立てる必要があります。null 検索語を CONTAINS() に渡すと hurl になることに注意してくださいDRG-50901: text query parser syntax error
。