【问题标题】:Is there any abstraction layer which makes a database look like Oracle?是否有任何抽象层使数据库看起来像 Oracle?
【发布时间】:2016-04-13 10:30:03
【问题描述】:

我们在生产中使用 Oracle,但在我们公司,很难在开发环境中安装。

有没有办法让 Perl(或任何其他语言)通过 DBI 模块(或任何其他语言向数据库发送 SQL 命令的等效模块)发送原始 SQL 语句,这些语句从 Oracle SQL 转换为 MySQL 或SQLite 还是别的什么?

因此应用程序会认为它在与 Oracle 通信,但实际上是在与不同的、更易于安装的开源/免费数据库通信。

【问题讨论】:

  • 对于非常简单的语句,您可以简单地交换数据库。但是,每个数据库都有自己的语法,即你真的应该安装一个 Oracle 数据库
  • 安装 Oracle 很容易。它甚至可以自动化。只是一个想法
  • 正确的解决方案是到处使用 ODBC
  • 您不希望您的开发环境尽可能与生产环境相似吗?即使有可能,这似乎是一个很大的错误。找出为什么设置 Oracle 开发实例很困难,并解决这些问题。
  • 我选择了 VirtualBox 和 Vagrant。让您的开发数据库在几分钟内可用。从头开始 - 创建新 - 加载数据 - 只需一个命令。这些工具让您的开发生活变得轻松。

标签: mysql oracle perl abstraction-layer


【解决方案1】:

这是不可能的。其他数据库引擎无法处理 Oracle 查询。 Oracle 中最简单的查询,例如,如果您想获取当前用户的姓名:

select user from dual

此查询使用DUAL 表,该表不存在于任何其他 DBMS 中。还有很多 Oracle 特定的构造(CONNECT BYMINUS 等)无法在其他引擎中处理。
在您的情况下,最好的方法是在虚拟机中创建一个 Oracle 安装,然后将其映像复制到另一台虚拟机以进行工作。

【讨论】:

  • 你不只是喜欢兼容性吗? ;P
  • @dsm 不,我只是喜欢 Oracle ;) 要在任何地方运行查询,它们必须与每个 DBMS 兼容。如果问题的作者准备放弃 Oracle 的所有特性,那么他就不需要 Oracle。
  • 日期/时间函数在各种 DBMS 之间似乎也有所不同。此外,在我看来,Oracle 有一个非常独特的更新命令,如果您可以使用 PK 与您不能并且必须输入与联接匹配的额外 exists 子句,这将大不相同。
【解决方案2】:

ANSI SQL 是您所指的抽象层。

假设目标数据库中存在所有表并且 RDBMS 支持 ANSI SQL,那么您的查询将完美地传输到其他数据库。

如果您希望使用标准中未定义的东西,那么它不太可能正常工作。

这是标准中Oracle 11.2G position 的链接。

在谈到 Oracle 时,他们的解决方案是提供 Oracle Database Gateways

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 2012-11-22
    • 2015-05-15
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    相关资源
    最近更新 更多