假设我有一个用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;
这使我免于管理异常处理程序中的闭包和游标语法