Динамический поиск с использованием SQL-запросов

Я реализую динамический поиск в моем приложении, у меня есть следующие варианты для создания запроса.

  1. Конкатенация строк из пользовательского ввода
  2. Используйте несколько запросов и извлеките правильный запрос на основе ввода пользователя
  3. Используйте один запрос, используйте подстановочные знаки для входных данных, не предоставленных пользователем.

например:

select * from A,B where a.id like nvl( {input}, '%')
and a.id = b.aid
and b.value like nvl({input2},'%');

Поскольку id является первичным ключом, я получаю следующую ошибку в оракуле при попытке.

2 ответа

Во-первых, для поиска по шаблону вам нужно использовать LIKE предикат, а не =, Во-вторых, вы не можете использовать LIKE предикат для числовых данных, очевидно. Что вы можете сделать, это:

select * from A,B where ( a.id = {input} or {input} is null )...

Простое решение может быть:

StringBuffer sqlSB = new StringBuffer("select * from A,B where a.id = b.aid ");
if(input!=null&&!input.equals("")){
    sqlSB.append(" and a.id = ").append(input);
}
if(input2!=null&&!input2.equals("")){
    sqlSB.append(" and b.value = '").append(input2).append("' ");
}
Другие вопросы по тегам