日期:2014-05-17  浏览次数:20839 次

ORACLE内char的参数处理(connection.prepareStatement)
本帖最后由 kevin2000ab 于 2013-02-08 10:43:30 编辑
id char(12) 内有一条记录ad001
实际存放时后面会补7位空格

如果用
where id = 'ad001' 或者
where id = 'ad001  ' 都是可以检索的

但是用
java.util.Collection;
PrepareStatement
带 ?的检索方式就不能得到结果
(void setString(int parameterIndex, String x))

虽然用trim可以解决
但是目前代码量太大 条件里一个个trim的工作量有点受不了
有快速的解决方法吗

PS
在没有其他方面的情况下
 trim(id) = ? 破坏索引
最好的解决方案是 id = RPAD(RTRIM(?), 12, ' ')吗


------解决方案--------------------
不要用char,用varchar2

alter table t modify(id varchar2(12));
------解决方案--------------------
建立一个基于trim(id)的函数索引也可以。
不过更合理的应该是对输出的参数值进行处理,也就是lpad