关于in(?)参数的问题(与JAVA相关)

doudourabbit 2006-06-07 09:57:05
比如有个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的数据都满足要求。

但是如果参数是集合参数,该怎么解决这样的问题呢?
...全文
635 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
singer_101 2006-06-08
  • 打赏
  • 举报
回复
解决就好,这是关键
软猫克鲁 2006-06-08
  • 打赏
  • 举报
回复
楼主用JAVA的prepareStatement的setObject把参数可以设置过去么?
如果是多个参数好像步行吧,比如想发行如下SQL的时候
column1 in ('1','2','3','4')

JAVA的变量怎么传递?
str = "'1','2','3','4'";

这样行么?
doudourabbit 2006-06-07
  • 打赏
  • 举报
回复
问题已经解决。

sql的写法仍然是:select * from table1 where column1 in (?) or ' ' in (coalesce(?,' '))//column1的长度为4,所以后面空串为长度为4的空串
但是要注意空串的长度不能小于column1的长度就不会报“字符串数据右截断”了。

估计DB2会根据这个空串的长度来截取输入参数的长度。

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧