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
。
來源
2010-06-25 09:55:15
APC
一個VARCHAR2表列的極限是4000個字符,但在PL/SQL一個VARCHAR2變量的上限爲32767個字符。您確定CONTAINS語句中的文本查詢限制爲4000而不是32767? – 2010-06-25 09:18:27
@MarkBaker - CONTAINS()是一個SQL函數,所以SQL限制適用。 – APC 2010-06-25 09:57:59
@APC謝謝澄清,我從來沒有真正使用Oracle的文本索引,所以我不確定 – 2010-06-25 10:01:14