私はスニペット以下のように単一の入力条件とOracleで使用OR claueできます(単一の入力パラメータです?):またはSQLクエリ内の句単一整合条件と
Select t1.name, t1.value from table t1 where t1.name ='abc' and (t1.col OR
t1.value =?);
私はスニペット以下のように単一の入力条件とOracleで使用OR claueできます(単一の入力パラメータです?):またはSQLクエリ内の句単一整合条件と
Select t1.name, t1.value from table t1 where t1.name ='abc' and (t1.col OR
t1.value =?);
あなたが値を再利用する場合あなたは、準備されたステートメント使用して検討することもでき、Javaコードからの問合せ:
declare
some_val number := 10;
begin
select t1.name, t1.value
from table t1
where t1.name ='abc' and (t1.col = some_val or t1.value = some_val);
end;
/
:オラクルから直接同じようなことをしようとした場合
String sql = "select t1.name, t1.value from table t1 where t1.name =? and (t1.col = ? or t1.value = ?)";
int someVal = 10;
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString("abc");
ps.setInt(2, someVal);
ps.setInt(3, someVal);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
String name = rs.getString("name");
String value = rs.getString("value");
}
は、あなたはセッション変数を使用することができます
それは良いですが、私は入力パラメータを渡す必要があるjavaコードからこれを呼び出しています。ここでsome_valはクエリで2回使用されます。つまり、javaコードから入力パラメータとして同じ値を2回渡す必要があります。しかし、私は、同じ質問が単一のsome_valを使って変更されたようにするために、Javaコードを変更したくありません。 – Vimal
あなたはそのために、IN句を使用することができます。
Select t1.name, t1.value
from table t1
where t1.name = 'abc'
and ? in (t1.col, t1.value);
それを行うには、いくつかの方法があります。
SELECT name, value
FROM table
WHERE name ='abc'
AND ? IN (col, value);
または、サブクエリを使用します。
はIN
句を使用します:
SELECT name, value
FROM table t
INNER JOIN
(SELECT ? AS input_var FROM DUAL) v
ON (t.col = v.input_var OR t.value = v.input_var)
WHERE name ='abc';
私はそれが可能ではないが、それ。 – Vimal