H2 数据库不支持 schema.package.function 结构

Posted

技术标签:

【中文标题】H2 数据库不支持 schema.package.function 结构【英文标题】:H2 Database doesn’t support schema.package.function structure 【发布时间】:2020-09-17 04:57:57 【问题描述】:

在我的项目中,我们使用 oracle 数据库作为主应用程序数据库,使用 H2 作为内存数据库,仅运行集成测试用例。 Oracle db 有许多结构为“schema.package.function()”的函数。问题是,我无法在 H2 中为集成测试用例重新创建相同的函数,因为 H2 以“dbname.schemaname.functionname()”的形式处理它。

例如:当代码使用 oracle db 运行时,“SELECT MDM.NEXT_KEYS.NEXT_REF_SOURCE_KEY from dual”有效。在 H2 上的集成测试用例期间,它会抛出错误“未找到 DB MDM”。因此,我在 h2 设置中将数据库名称设置为 MDM,将架构名称设置为 NEXT_KEYS。它起作用了。但是我的下一个函数 PAYERS.KEY_TRANSLATIONS.CORE_ENHANCED_DESC_4_KEY 现在失败了,说“找不到 DB PAYERS”。

更改预言机功能是不可能的,因为它们被多个团队使用。

如果 H2 无法做到这一点,您能否为 spring boot 推荐一个好的备用内存数据库

感谢您的帮助!

【问题讨论】:

内存数据库永远不会达到完全 RDBMS 支持的标准。您正在使用 Oracle,然后在测试中使用 oracle。使用诸如 testcontainers 之类的东西来引导一个 oracle 数据库,以便在您的测试中使用。 【参考方案1】:

我能够解决这个问题。在此处添加解决方案链接,以便它可以帮助某人

设置这个标志 IGNORE_CATALOGS=TRUE 解决了这个问题。启用后,目录(数据库)的名称将被忽略。

spring.datasource.url = jdbc:h2:mem:testdb;MODE=Oracle;IGNORE_CATALOGS=TRUE

参考以下链接https://github.com/h2database/h2database/issues/2893

【讨论】:

以上是关于H2 数据库不支持 schema.package.function 结构的主要内容,如果未能解决你的问题,请参考以下文章

在单元测试时支持 H2 数据库中的 DB2 功能

H2数据库做单测数据库时踩到的坑

在 MODE=MySQL 中运行 h2 不支持 MySQL 转储

H2 使用在线与数据类型支持

服务器中不支持 ALPN 的 HTTP/2 h2

H2数据库:聚集索引支持