尝试执行使用空参数值的本机 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());
…
该查询使用 Oracle 的NVL
函数来处理null
参数。q.getResultList ()
但是,当我运行此代码时,它会因调用错误而失败。
错误如下:
ORA-01465: invalid hex number
现在,我解决了这个问题
q.setParameter("svhlick", (entity.getSvhlick() == null ? " " : entity.getSvhlick()));
但是这个解决方案并不好。
数据库 Oracle 11gR2 win1251 编码。
Netbeans 7.3.1 项目编码 UTF-8。
entity.getSvhlick() - Oracle 中的字符串 svhlick - varchar2(1)
我认为问题可能是由于编码不同。
有什么帮助吗?