用于分页的 Oracle 方言

Oracle dialect for pagination

我们正在使用 spring 数据 JDBC

从 oracle 中检索数据

我们正在使用 org.springframework.data.relational.core.dialect.OracleDialect 从数据库中检索数据。

当我们有一个使用 CrudRepository

的存储库时,它按预期工作

但是如果我们修改扩展 PagingAndSortingRepository 的存储库以根据页码进行检索,我们会遇到异常。

根据分析,我们发现 LIMIT_CLAUSELOCK_CLAUSE 生成的查询不符合 Oracle。

是否有 Oracle 方言可以生成作为 org.springframework.data.relational.core.dialect.Dialect 实例的适当限制查询?

唯一可用的 OracleDialect is based on the AnsiDialect` 和 Oracle12c 应该支持 ANSI 标准。

进一步调查导致怀疑 ANSI 标准允许多个变体,并且 AnsiDialect 创建了一个不适用于 Oracle12 的子句,尽管它被用于测试的 OracleXE18 接受。

Spring 数据 JDBC 当前创建 OFFSET %d ROWS FETCH FIRST %d ROWS ONLY 形式的子句。 https://dba.stackexchange.com/questions/30452/ansi-iso-plans-for-limit-standardization 符合标准。

但是 暗示 Oracle12 可能需要 OFFSET %d ROWS FETCH NEXT %d ROWS ONLY

作为解决方法,您可以按照 https://spring.io/blog/2020/05/20/migrating-to-spring-data-jdbc-2-0#dialects

中所述注册自定义方言