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