使Oracle last_day函数与H2数据库兼容

时间:2016-12-29 09:46:01

标签: oracle h2

我正在编写集成测试,我想使用H2数据库测试我的SQL查询。在生产中,这些查询是针对Oracle数据库运行的。

我必须运行此查询

我尝试使用兼容模式

SELECT last_day(MY_CURRENT_DATE) from MY_TIME

使用oracle兼容模式jdbc:h2:mem:default;MODE=Oracle;DB_CLOSE_DELAY=-1,但收到此错误:

org.h2.jdbc.JdbcSQLException: Function "LAST_DAY" not found; SQL statement:
SELECT last_day(MY_CURRENT_DATE) from MY_TIME [90022-176]

似乎兼容模式并未涵盖特定于供应商的功能。

我知道如何在测试中解决这个问题。只需使用H2用户定义函数覆盖Oracle last_day函数:

DROP ALIAS IF EXISTS last_day;

CREATE ALIAS last_day AS $$
String last_day(java.sql.Connection con, Date date) throws Exception {
        //get the last day of month
  }
}
$$;

但我想知道这是不是最好的主意? 有没有办法以与所有其他数据库(包括H2)兼容的方式重写Oracle LAST_DAY函数(计算月份的最后一天)?

1 个答案:

答案 0 :(得分:0)

对我来说很明显,对于验收/系统测试,您应该使用与生产中的数据库非常相似的数据库。

对于集成和单元测试,您可以完全模拟数据库服务器组件。