运行H2时的DB2语法(在DB2模式下)

时间:2011-12-01 10:25:07

标签: db2 h2

我有以下查询,直接针对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   声明:从klv80201 union选择slutt_dato + 1天作为tDato   从klv12101中选择fra_dato作为tDato,其中avtalenr =?和kundenr   =? union选择fra_dato作为来自klv12401的tDato,其中avtalenr =?和kundenr =?和MEDLEMSTATU&lt; '32'由tDato desc首先获取   仅限1行; [42122-149]

如果我删除“+1天”,则查询在H2中运行良好。来自H2 JDBC驱动程序的错误消息是错误的,列“SLUTT_DATO”确实存在并且在删除“+1天”时效果很好。

有什么好的建议为什么H2会像它一样?这是一个错误还是我误解了什么?

提前致谢

1 个答案:

答案 0 :(得分:0)

H2不理解+ 1 day并且在这里感到困惑。然而,这将有效:

"select slutt_dato + 1 as tDato from klv80201 "

但是我担心这对IBM DB2不起作用......我认为这个问题并不适用于IBM DB2和H2。