Синтаксис DB2 при запуске H2 (в режиме DB2) - PullRequest
1 голос
/ 01 декабря 2011

У меня есть следующий запрос, который хорошо работает при работе непосредственно с DB2:

String sql =
"select slutt_dato + 1 day  as tDato from klv80201 " +
"union " +
"select fra_dato as tDato from klv12101 where avtalenr = :avtalenr and kundenr = :kundenr " +
"union " +
"select fra_dato as tDato from klv12401 where avtalenr = :avtalenr and kundenr = :kundenr and MEDLEMSTATU < '32' " +
"order by tDato desc fetch first 1 rows only;";

Но когда я запускаю его через тест с H2 в качестве базы данных со следующей конфигурацией:

jdbc:h2:mem:play;MODE=DB2;LOCK_TIMEOUT=10000;LOCK_MODE=0

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

org.h2.jdbc.JdbcSQLException: столбец "SLUTT_DATO" не найден;Оператор SQL: выберите slutt_dato + 1 день в качестве tDato из klv80201 union Выберите fra_dato в качестве tDato из klv12101 где avtalenr =?а кунденр =?union выберите fra_dato как tDato из klv12401, где avtalenr =?а кунденр =?и MEDLEMSTATU <'32' - порядок по tDato для извлечения только первых 1 строк;[42122-149] </p>

Если я уберу "+1 день", запрос прекрасно работает во второй половине дня.Сообщение об ошибке от драйвера JDBC H2 неверно, столбец «SLUTT_DATO» существует и работает хорошо при удалении «+1 день».

Есть ли хорошие предложения, почему H2 действует так же, как и он?Это ошибка или я что-то неправильно понимаю?

Заранее спасибо

1 Ответ

0 голосов
/ 01 декабря 2011

H2 не понимает + 1 day и запутывается здесь.Однако это будет работать:

"select slutt_dato + 1 as tDato from klv80201 "

Но я боюсь, что это не сработает для IBM DB2 ... Я не думаю, что есть простое решение этой проблемы, которое работает как на IBM DB2, так и на H2.

...