【发布时间】:2013-09-20 11:25:08
【问题描述】:
尝试执行使用空参数值的本机 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)
我认为问题可能是由于不同的编码。
有什么帮助吗?
【问题讨论】:
-
改用合并?
-
nvl(t1.svhlick,' ')=coalesce(:svhlick,' ') it's= ORA-00932: 不一致的数据类型: 预期 BINARY, 收到 CHAR
标签: hibernate encoding entitymanager nvl