Функция SQL - UPPER в DB2 не работает

Я подключаюсь к базе данных DB2 (DB2 v9.7.400.501) из моего веб-приложения Java с помощью драйвера IBM DB2 Type 4 (db2jcc4.jar). Когда я пытаюсь выполнить инструкцию SQL, как это,

SELECT * FROM USERS WHERE UPPER(USERNAME) = UPPER('testuser');

Я получаю следующее исключение:

com.ibm.db2.jcc.am.SqlSyntaxErrorException: ошибка SQL DB2: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=;;= UPPER('testuser');END-OF-STATEMENT, DRIVER=4.12.55

Проблема от UPPER функция, поскольку, нормальный оператор выбора выполняется нормально.

1 ответ

Решение

Может быть, вы должны использовать это так:

SELECT * FROM USERS WHERE UPPER(USERNAME) LIKE UPPER('testuser');

Ваш код с '=', похоже, подходит для SQLite, но я не знаю, что такое db2.

UPD. После некоторого исследования я могу сказать, что ошибка вызвана кодом Java, который пытается выполнить несколько операторов в одном запросе, используя ';' в качестве разделителя. Вы должны попробовать использовать PreparedStatement, addBatch() и executeBatch() для нескольких операторов.

UPD2. Это проблема, связанная с DB2. PostgreSQL, afaik, позволяет использовать несколько операторов в одном запросе.

Другие вопросы по тегам