如何在 H2 数据库中模拟 Oracle DB 链接?
Posted
技术标签:
【中文标题】如何在 H2 数据库中模拟 Oracle DB 链接?【英文标题】:How to simulate an Oracle DB link in H2 database? 【发布时间】:2020-03-06 08:51:43 【问题描述】:我的问题如下:我必须测试一个用 Java Spring 编写的应用程序。 在现实生活中,数据库服务器将是一个 Oracle。有一些选择使用 DB 链接。 (例如:select * from country@isem_db; ) 在测试环境中,我们使用 H2 数据库,它不知道这种语法。(@) 我的问题是:这是否有可能使这种 Oracle 语法为 H2 所接受?在不修改原始源代码的情况下是否存在一些解决方法?
【问题讨论】:
如果不修改应用程序中的查询或 H2 源,这是不可能的; H2 不支持这种非标准语法。您也可以在 H2 中链接来自其他数据库的表,但此类链接的表使用带有普通名称的常规语法。 【参考方案1】:您的 Oracle 代码不应包含嵌入式数据库链接。数据库链接名称可能会因环境而异,这会使您的代码变得脆弱。或者您可能需要切换到使用本地副本(或实体化视图)。
正确的方法是使用同义词。在 Oracle 中,您将为远程表创建同义词:
create synonym isem_country for country@isem_db;
显然您需要更改 Oracle 代码以引用同义词名称而不是远程表。
这为您提供了在 H2 中运行的解决方案,前提是您使用的是 a recent version which supports table synonyms。在 H2 中,您将在本地表上创建具有相同名称的同义词:
create synonym isem_country for country;
【讨论】:
以上是关于如何在 H2 数据库中模拟 Oracle DB 链接?的主要内容,如果未能解决你的问题,请参考以下文章
SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase(代码片
SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase] 错误
SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
异常 SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]