0

我正在我的应用程序中实现动态搜索,我有以下选项来构建查询。

  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 是主键,所以我在尝试时在 oracle 中收到以下错误。

4

2 回答 2

2

首先,对于通配符搜索,您需要使用LIKE谓词,而不是=. 其次,很明显,您不能将LIKE谓词用于数字数据。你可以做的是:

select * from A,B where ( a.id = {input} or {input} is null )...
于 2014-08-20T21:22:21.517 回答
0

一个简单的解决方案可能是:

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("' ");
}
于 2014-08-20T21:32:07.357 回答