Я получаю ошибку Oracle при попытке выполнить собственный SQL-запрос, который использует значение нулевого параметра. Я варил до этого теста:Hibernate + nvl() = Oracle 01465
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 Oracle, чтобы обработать нулевые параметры. Однако, когда я запускаю этот код, он не работает с ошибкой в вызове q.getResultList(). Ошибка заключается в следующем:
ORA-01465: invalid hex number
Теперь я хочу решить эту проблему, как
q.setParameter("svhlick", (entity.getSvhlick() == null ? " " : entity.getSvhlick()));
Но this'is решение не является хорошим.
База данных Oracle 11gR2 win1251. Netbeans 7.3.1 кодирование проекта UTF-8. entity.getSvhlick() - String svhlick в Oracle - varchar2 (1)
Я думаю, какая проблема в кодировании разницы. Эти настройки изменяют нежелательные Любые подсказки или предложения?
Используйте вместо COALESCE? – Ben
nvl (t1.svhlick, '') = coalesce (: svhlick, '') it = ORA-00932: непоследовательные типы данных: ожидаемый BINARY, полученный CHAR – asu