从前端搜索时如何避免外卡字符和特殊字符

时间:2011-10-04 08:26:02

标签: oracle dynamic-sql

假设我在前端有一个用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。

1 个答案:

答案 0 :(得分:1)

逃!不要让用户使用%。还要注意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;

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