Я сталкиваюсь с проблемой с База данных H2 , я не могу понять, что это за проблема.
Я работаю над генератором кода из трех букв, который должен вести себя путем увеличения на один из самых высоких существующих кодов (это функция SQL, которая будет храниться на сервере БД).
Следующий код отлично работает в консоли H2 :
SELECT TOP 1 concat(a.Chr, b.Chr, c.Chr) AS REF
FROM
(VALUES('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z')) a(Chr)
CROSS JOIN
(VALUES('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z')) b(Chr)
CROSS JOIN
(VALUES('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z')) c(Chr)
WHERE concat(a.Chr,b.Chr,c.Chr) > (
SELECT TOP 1
CASE
WHEN INSTRUCTION_CODE IS NULL
THEN ''
ELSE INSTRUCTION_CODE
END
FROM ACCOUNT
ORDER BY INSTRUCTION_CODE DESC
)
ORDER BY REF;
Мне нужно реализовать этот запрос в Java тесте jUnit. Вот что я сделал:
public static ResultSet getReference(java.sql.Connection con) throws SQLException {
String query = "SELECT TOP 1 concat(a.Chr, b.Chr, c.Chr) AS REF "
+ "FROM "
+ "(VALUES('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z')) a(Chr) "
+ "CROSS JOIN "
+ "(VALUES('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z')) b(Chr) "
+ "CROSS JOIN "
+ "(VALUES('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z')) c(Chr) "
+ "WHERE concat(a.Chr, b.Chr, c.Chr) > "
+ "(SELECT TOP 1 "
+ " CASE WHEN INSTRUCTION_CODE IS NULL "
+ " THEN '' "
+ " ELSE INSTRUCTION_CODE "
+ " END "
+ "FROM ACCOUNT order by INSTRUCTION_CODE DESC) "
+ "ORDER BY REF";
java.sql.ResultSet rs = con.createStatement().executeQuery(query);
return rs;
}
Вот сообщение об ошибке, которое я получаю при воспроизведении:
Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "SELECT TOP 1 CONCAT(A.CHR, B.CHR, C.CHR) AS REF FROM (VALUES('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z'))A([*]CHR) CROSS JOIN (VALUES('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z'))B(CHR) CROSS JOIN (VALUES('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z'))C(CHR) WHERE CONCAT(A.CHR, B.CHR, C.CHR) > (SELECT TOP 1 CASE WHEN INSTRUCTION_CODE IS NULL THEN '' ELSE INSTRUCTION_CODE END FROM ACCOUNT ORDER BY ACBS_PAYMENT_INSTRUCTION_CODE DESC) ORDER BY REF ";
Что-то, что вы видите, я не видел?
Thanx