Oracle全文檢索查詢及特殊字元處理查詢

2021-10-24 08:10:03 字數 1458 閱讀 7299

全文檢索的建立:

1、開啟全文檢索查詢許可權。

解鎖:

alter user ctxsys account unlock;

角色授權:

2、建立文字解析器,預設使用chinese_vgram_lexer。

begin

ctx_ddl.create_preference ('my_lexer', 'chinese_vgram_lexer');

end;

3、建立對應的表字段全文索引。

create index ier_sys_user_zl on sys_user(zl) indextype  is  ctxsys.context parameters ('lexer my_lexer sync (on commit)'); 

一般我們語句為:  select * from sys_user where contains(zl,'北京')>0  即可查詢出我們需要的。

但是有時候會碰到一些特殊oracle自帶的特殊字元:-()&"*%等,就會報錯或者查不到想要的內容。

我們也是想了一些辦法,最終通過建立函式的方式,先對查詢的字元處理下,例如:北京-西門,就會處理成北京\-西門,才能得到我們要查詢的內容。

函式如下:

注意下:目前針對&符號還沒有測試。

create or replace function pro_replace_char(v_str varchar2) return varchar2 is

v_res varchar2(2000);

begin

v_res:=v_str;

for r in (

select '-' as a from dual

union all

select '(' from dual

union all

select ')' from dual

union all

select '&' from dual

union all

select '"' from dual

union all

select '*' from dual

union all

select '%' from dual

) loop

v_res:=replace(v_res,r.a,'\'||r.a);

end loop;

return v_res;

end pro_replace_char;

然後我們的語句得加上這個函式就不會執行報錯或者查不到想要的內容了。  

select * from sys_user where contains(zl,pro_replace_char('北京-西門'))>0

oracle全文檢索

測試環境oracle11g begin ctx ddl.create preference test lexer chinese vgram lexer ctx ddl.create preference sms address lexer chinese lexer end create inde...

oracle全文檢索

先建立個表 可見content是blob型的,本文就是給content欄位全文檢索 注 該錶名為sycontent 建立全文檢索lexer 建立全文索引時,你用的使用者必須要有ctx dll許可權,如果沒有再,在該使用者的超級管理使用者下的sysdba登入執行 grant execute on ct...

oracle全文檢索(oracle text)記錄

size large 1.全文檢索和普通檢索的區別 不使用oracle text功能,當然也有很多方法可以在oracle資料庫中搜尋文字,比如instr函式和like操作 select from mytext where instr thetext,oracle 0 select from myte...