如何在前端搜索时避免通配符和特殊字符



假设我有一个用Java编写的前端搜索功能。我有一个文本框,例如名称。当我传递一个名字或一个字符时,它工作得很好,但是当我传递任何特殊字符时,它不工作,因为我将这个参数发送给oracle过程,它使用动态查询。

假设我的过程中的查询是:

create or replace procedure abc
(abc IN  table.name%type
,p_abc   abc_cur 
)
is 
v_var varchar2(2000); 
begin
v_var:='select * from table where name LIKE '%'NVL(p_name,name)'%'';
open c1 for v_var;
end abc;

当我通过[%,_,。]它会根据通配符进行搜索,就像你在查询中看到的那样。

现在,当我传递[']时,它会给出一个异常。请告诉我一个解决方案如何处理这个后端,我不想在查询中考虑任何特殊字符,使用动态查询是强制性的。

注意:括号[]内的参数用逗号分隔。

我使用Oracle作为RDBMS

escape!不要让用户使用%。还要注意sql注入。(其他需要注意的字符是_和?)

顺便说一句,在oracle中你可以使用

SELECT * FROM TABLE_A WHERE FIELD LIKE '%sometext%%' escape by ''

编辑:我更喜欢在for循环中使用光标

for x in (select whatever from whenever) loop
   DBMS_OUTPUT.putLine(x.field);
end loop;

这使我免于管理异常处理程序中的闭包和游标语法

最新更新