how - Sintaxis de DB2 cuando se ejecuta H2(en modo DB2)
org h2 (1)
Tengo la siguiente consulta que funciona bien cuando se ejecuta directamente contra 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;";
Pero cuando lo ejecuto a través de una prueba con H2 como base de datos con la siguiente configuración:
jdbc:h2:mem:play;MODE=DB2;LOCK_TIMEOUT=10000;LOCK_MODE=0
Aparece el siguiente mensaje de error:
org.h2.jdbc.JdbcSQLException: Columna "SLUTT_DATO" no encontrada; Instrucción SQL: seleccione slutt_dato + 1 día como tDato de klv80201 union select fra_dato como tDato de klv12101 donde avtalenr =? y kundenr =? unión seleccione fra_dato como tDato de klv12401 donde avtalenr =? y kundenr =? y MEDLEMSTATU <''32'' orden por tDato desc buscar las primeras 1 filas solamente; [42122-149]
Si elimino el "+1 día", la consulta funciona bien en H2. El mensaje de error del controlador H2 JDBC es incorrecto, la columna "SLUTT_DATO" existe y funciona bien al eliminar "+1 día".
¿Alguna buena sugerencia de por qué H2 actúa como lo hace? ¿Es un error o soy yo quien no entiende algo?
Gracias por adelantado
H2 no comprende + 1 day
y se confunde aquí. Esto funcionará sin embargo:
"select slutt_dato + 1 as tDato from klv80201 "
Pero me temo que esto no funcionará para IBM DB2 ... No creo que haya una solución fácil a este problema que funcione tanto en IBM DB2 como en H2.