用于分页的 Oracle 方言
Oracle dialect for pagination
我们正在使用 spring 数据 JDBC
从 oracle 中检索数据
我们正在使用 org.springframework.data.relational.core.dialect.OracleDialect
从数据库中检索数据。
当我们有一个使用 CrudRepository
的存储库时,它按预期工作
但是如果我们修改扩展 PagingAndSortingRepository
的存储库以根据页码进行检索,我们会遇到异常。
根据分析,我们发现 LIMIT_CLAUSE
和 LOCK_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
中所述注册自定义方言
我们正在使用 spring 数据 JDBC
从 oracle 中检索数据我们正在使用 org.springframework.data.relational.core.dialect.OracleDialect
从数据库中检索数据。
当我们有一个使用 CrudRepository
但是如果我们修改扩展 PagingAndSortingRepository
的存储库以根据页码进行检索,我们会遇到异常。
根据分析,我们发现 LIMIT_CLAUSE
和 LOCK_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
中所述注册自定义方言