나는이 DB2에 대해 직접 실행할 때 좋은 일 다음 쿼리 :DB2 구문 (DB2 모드에서) H2를 실행할 때
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 선언문 : klv80201 유니온에서 tDato로 slutt_dato + 1 day를 선택하십시오. klv12101에서 fra_dato를 tDato로 선택하십시오. 여기서 avtalenr =? 및 kundenr =? union klv12401에서 tDato로 fra_dato를 선택하십시오. 여기서 avtalenr =? 그리고 kundenr =? 및 MEDLEMSTATU < tDato에 의해 '32'order first fetch 1 행만; [42122-149]
"+1 일"을 삭제하면 H2에서 좋은 결과를 얻을 수 있습니다. H2 JDBC 드라이버의 오류 메시지가 잘못되어 "SLUTT_DATO"열이 존재하며 "+1 일"을 제거 할 때 유용합니다.
H2가 왜 그렇게 행동하는지 좋은 제안이 있습니까? 그것은 버그입니까, 아니면 저를 오해하는 것입니까? 사전에
덕분에
음, 알 수 있습니다. 나는 이것을 "해킹"으로 해결했다 문자열 plusADay; if (Play.id.equals ("test")) { plusADay = "1"; // H2 모드 } else { plusADay = "1 day"; // DB2 모드 } –