关于in(?)参数的问题(与JAVA相关)
比如有个sql:select * from table1 where column1 in(?)
这个时候用户如果输入条件,则查询出满足条件的记录;但是用户希望没有输入条件则查询出所有的记录。
这样改造sql:select * from table1 where column1 in (?) or '' in (coalesce(?,''))
这样的结果是用户不输条件确实查询出了所有记录,但是用户一旦输入条件则报 [IBM][CLI Driver] CLI0109E 字符串数据右截断。 SQLSTATE=22001
程序是使用JAVA的prepareStatement的setObject把参数设置进去的,程序不可修改。解决办法只考虑修改SQL来满足需求。
这种情况如果参数不是集合参数就好解决多了,如下:
select * from table1
where coalesce(column1,'')=coalesce(?,coalesce(column1,'');//如果用户未输参数或者column1中存在null的数据都满足要求。
但是如果参数是集合参数,该怎么解决这样的问题呢?