Ограничение в 4000 символов не является какой-то произвольной границей: это максимальное количество символов VARCHAR2, которое может обрабатывать Oracle SQL.
4000 символов — это много текста. На английском языке это около 600 слов, или страница формата А4, и немного шрифта приемлемого размера. Я не могу придумать много приложений, которые требуют поиска таких больших кусков словоблудия. Даже колледжи, проверяющие сочинения студентов на предмет плагиата, будут работать не более чем на уровне абзаца.
Однако, если у вас действительно есть ситуация, в которой сопоставление скудных 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
.
person
APC
schedule
25.06.2010