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 结构的主要内容,如果未能解决你的问题,请参考以下文章