繁体   English   中英

如何在用于运行Java单元测试的内存数据库中模拟Oracle(+)外连接表示法?

[英]How to emulate Oracle (+) outer join notation in in-memory database used to run Java unit tests?

我们使用HSQLDB和Oracle数据库语法(jdbc:hsqldb:mem:TestDB; sql.syntax_ora = true)进行数据层单元测试。

(我们意识到这并不理想,如果我们可以测试一个真正的Oracle数据库会更好。但是这不是一个选项,因为我们要确保我们可以在任何地方运行我们的自动化测试。在后面的步骤中,所有查询还在实际Oracle数据库的集成测试中进行了测试,该数据库的设置类似于生产数据库。)

对于使用HSQLDB的查询,有没有办法支持Oracle外连接(+)表示法?

在我看来,我们不应该使用(+)符号而是使用标准的外连接符号。 然而,负责调整查询的人使用这种表示法,因此与他们的通信将变得更加困难/错误。 虽然如果找不到解决方案可能是一个选项,但这不是问题。

我找到了以下帖子: http ://comments.gmane.org/gmane.comp.java.hsqldb.user/5756在那里提到的QueryRewrite补丁,我会有必要的钩子来处理(+)我自己,但是接口从未进入官方HSQL版本。

HSQL还有另一种解决方法吗?

我们可以在单元测试中自己添加查询重写(而不是在测试数据库级别),但如果我们可以避免这种情况会更好。

如果HSQL没有解决方法,是否有任何其他内存数据库/数据库可以从jar启动,它支持这个(+)外连接表示法?

我想你已经在你的问题中引用了所有“简单”的可能性。

因此,唯一剩下的方法是在将代码发送到HSQLDB之前重写代码中的查询。

将查询编写为不使用(+)表示法,然后为数据库调优器重写它们(使用脚本)应该更简单。 重写应该比另一个方向更容易,因为标准符号在其结构中包含更多信息。

根本就不要使用它。 有时Oracle优化器以不同的方式处理这两种语法。 截至11g它结束了,没有理由坚持这种语法。

但无论如何,Oracle还有另一种SQL语法增强功能 - 例如分析查询。 也许你应该使用OracleXE进行自动化测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM