【发布时间】:2020-04-22 06:44:55
【问题描述】:
背景
我使用 Oralce 作为数据库,使用 H2 Embedded 内存数据库进行集成测试。
我在 H2 中创建了一些表,并且能够获取一些插入的数据。但是,我无法检索在 H2 中创建的序列的当前序列值。
我知道 Oracle 和 H2 并不相同,它们使用相似但不同的语法。我也知道您可以在 H2 内存数据库中定义一些别名并嵌入 Java 代码来代替 Oracle SQL 函数。这给了我一个提示,在 H2 数据库上使用 Oracle 的语法检索序列值时必须有一种解决方法。
问题
如何使 Oracle 用于选择序列当前值的语法在 H2 上工作?我是否需要创建别名并编写嵌入式 Java 代码来代替 Oracle 的语法?我有哪些选择?
被测代码使用以下假设但相似的 SQL
select myschema.mysequence.nextval from dual
但我收到如下错误
org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "nextval" not found [42122-199]
很明显,由于语法的不同,这不会起作用。我正在寻找一种解决方法,而无需更改正在测试的使用 Oracle 语法的代码。
更新
我使用的是 Spring JDBC 的 EmbeddedDatabaseBuilder,这意味着我不会连接到单独的独立 H2 数据库实例,而是连接到动态创建的实例,其中我包含 DDL 脚本来创建 DB 对象。
以下帖子以及接受的答案帮助解决了这个问题。
Does Spring embedded database support different SQL dialects?
【问题讨论】:
标签: java integration-testing h2 spring-jdbc