2017-09-18 8 views
0

私はスニペット以下のように単一の入力条件とOracleで使用OR claueできます(単一の入力パラメータです?):またはSQLクエリ内の句単一整合条件と

Select t1.name, t1.value from table t1 where t1.name ='abc' and (t1.col OR 
t1.value =?); 
+0

私はそれが可能ではないが、それ。 – Vimal

答えて

0

あなたが値を再利用する場合あなたは、準備されたステートメント使用して検討することもでき、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"); 
} 

は、あなたはセッション変数を使用することができます

+0

それは良いですが、私は入力パラメータを渡す必要があるjavaコードからこれを呼び出しています。ここでsome_valはクエリで2回使用されます。つまり、javaコードから入力パラメータとして同じ値を2回渡す必要があります。しかし、私は、同じ質問が単一のsome_valを使って変更されたようにするために、Javaコードを変更したくありません。 – Vimal

1

あなたはそのために、IN句を使用することができます。

Select t1.name, t1.value 
from table t1 
where t1.name = 'abc' 
    and ? in (t1.col, t1.value); 
1

それを行うには、いくつかの方法があります。

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'; 
関連する問題