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 来组装它。请注意,将空搜索字词传递给 CONTAINS() 将抛出DRG-50901: text query parser syntax error
.