Функция 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, позволяет использовать несколько операторов в одном запросе.