尝试执行使用空参数值的本机SQL查询时出现Oracle错误。我把它归结为这个测试用例:
String SQL_SELECT =
"select * from act t1 where t1.G074=:G074 AND t1.G542=:G542 AND
nvl(t1.svhlick,' ')=nvl(:svhlick,' ')
and t1.svhlic=:svhlic
and t1.sf$version =
(select max(sf$version) from act t2 where t2.G074=t1.G074 and t2.G542=t1.G542 AND nvl
(t2.svhlick,' ')=nvl(t1.svhlick,' ') and t2.svhlic=t1.svhlic)";
Query q = em.createNativeQuery(SQL_SELECT, Act.class);
….
q.setParameter("svhlick", entity.getSvhlick());
…查询使用甲骨文的NVL函数来处理null参数。但是,当我运行这段代码时,它会失败,q.getResultList ()调用会出错。
错误如下:
ORA-01465:无效十六进制号
现在,我把这个问题解决了
q.setParameter("svhlick", (entity.getSvhlick() == null ? " " : entity.getSvhlick()));但这是解决办法不好.
数据库Oracle11gR2 win1251编码
Netbeans 7.3.1项目编码UTF-8。
Oracle-varchar2(1)中的entity.getSvhlick() - svhlick
我认为问题可能是由于不同的编码。
有什么帮助吗?
发布于 2017-01-11 06:16:48
我也有同样的问题,并通过专门的类型来解决,比如:
q.setParameter("svhlick", entity.getSvhlick(), StandardBasicTypes.STRING);https://stackoverflow.com/questions/18915598
复制相似问题