2017-01-18 8 views
0

にリストを渡すときに、私は次のクエリを持っている:無効な関係演算子Where句

SELECT * 
FROM TABLE1 TD 
WHERE COL1 like '%' ||?|| '%' 
AND COL2 like '%' ||?|| '%' 
AND ((:statusId) IS NULL) OR ((:statusId) IS NOT NULL AND STATUS_ID IN (:statusId))) 
ORDER BY COL1 DESC; 

StatusIdは、複数の値/単一の値またはnullを持つことができます。 Spring JDBCを使用して値1,2を渡すと、無効な関係演算子が取得されます。

+1

それらを削除する必要があります、ev erywhere。それはおそらく同時にリストとスカラーになることはできません。 –

+0

これは、1、2(カンマで区切られた2つの数字のリスト)を渡さないためです。 '1、2'のように一重引用符で囲まれた文字列を渡しています。それは同じことではなく、周りに道がありますが、自明なものではありません。この質問は、SOの "variable IN list"などを検索するために何千回も尋ねられています。 – mathguy

+0

@mathguyリストを渡すことはできません。それが渡される文字列の場合、クエリはOPが期待する行を返しません。しかし、もし:statusIdが文字列なら、なぜこれがエラーを起こすべきですか? – miracle173

答えて

0

あなたはアポストロフィなし1,2を渡している場合、問題はあなたが'1,2'を渡している場合、原因、それはする唯一の等しいSTATUS_IDは=「1.2」をあなたがSTATUS_ID IN (:statusId)に問題があるでしょう(:statusId) IS NULL(:statusId) IS NOT NULL

ですそしてないSTATUS_ID = 1またはSTATUS_ID = 2

を考慮に上記のすべてを撮影するとき、あなたは同じパラメータ名、 `statusId`を使用しているアポストロフィでそれを渡すと、最後のビットからSTATUS_ID IN (REPLACE(:statusId,'''',''))

関連する問題