Как избежать подстановочных знаков и специальных символов при поиске с внешнего интерфейса - PullRequest
0 голосов
/ 04 октября 2011

Предположим, у меня есть функция поиска в интерфейсе, написанном на Java. У меня есть текстовое поле, например, имя. Когда я передаю имя или символ, он работает нормально, но когда я передаю любой специальный символ, он не работает, потому что я отправляю этот параметр в процедуру оракула, которая использует динамический запрос.

Предположим, запрос в моей процедуре такой:

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 в качестве СУБД.

1 Ответ

1 голос
/ 04 октября 2011

бежать!Не позволяйте пользователю использовать%.Также остерегайтесь инъекций sql.(Другие символы, которые нужно знать: _ и?)

Кстати, в Oracle вы можете использовать что-то вроде

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

С уважением

РЕДАКТИРОВАТЬ: я предпочитаю использовать курсордля циклов

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

это избавляет меня от управления замыканиями в обработчиках исключений и синтаксисе курсора

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...