gpt4 book ai didi

java - 同时支持Oracle和MySQL : how similar is their SQL syntax?

转载 作者:可可西里 更新时间:2023-11-01 06:53:15 25 4
gpt4 key购买 nike

我们在一个项目中使用 Oracle,并且希望也支持 MySQL。他们的 SQL 方言有多接近?

是否有可能在没有太多体操的情况下对两者使用相同的 SQL 源代码?

详细信息:

  • 我们使用的是 iBatis,这是一种持久性管理器,可以将 SQL 语句干净地隔离到资源文件中。但我们在 SQL 级别工作,这有其优势(和劣势)。
  • 我们不希望迁移到像 Hibernate 这样的对象关系映射器,因为它会完全保护我们免受方言差异的影响。
  • 我们努力保持 Oracle SQL 的通用子集。
  • 没有 PL/SQL。
  • 我们不使用存储过程或触发器(无论如何)。
  • 我们使用检查约束、唯一约束和外键约束。
  • 我们使用 ON DELETE CASCADE。
  • 我们使用事务(在 iBatis API 级别完成)。
  • 我们在查询中调用了一些 Oracle 时间戳函数。
  • 我们将结合使用 InnoDB 存储引擎和 MySQL(它支持事务和约束)。

那么你的想法是什么?我们是否需要维护两组不同的 iBatis SQL 资源文件,每个方言一个,或者是否可以使用一组支持 MySQL 和 Oracle 的 SQL?

最后更新:感谢所有的回答,尤其是对 Troels Arvin 差异页面的指点。令人遗憾的是,该标准并不更加标准。对我们来说,问题是 MySQL 自动递增与 Oracle 序列、MySQL LIMIT 与 Oracle Rowumber() 以及可能是一两个奇怪的函数。大多数其他一切都应该很容易传输,模数一些编辑以确保我们使用的是 SQL-92,正如@mjv 指出的那样。更大的问题是某些查询可能需要在每个 DBMS 中进行不同的手动优化。

最佳答案

预计路上会有一些小颠簸,但总体来说应该相对容易。

从您当前使用的功能列表来看,应该只有少数句法或语义差异,通常很容易修复或解决。您不使用 PL/SQL 和/或存储过程这一事实是一个优势。一个好的经验法则是尝试并坚持使用大多数 DBMS 支持的 SQL-92,尤其是 Oracle 和 MySQL。 (请注意,这不是当前的 SQL 标准,即 SQL-2008)。

一些区别:

  • “LIMIT”是一个著名的:为了限制在结果列表中检索的行数,MySQL 使用 LIMIT n,在查询结束时,Oracle 在 WHERE 子句中使用 RowNumber()(这是痛苦的,因为您还需要在 SELECT 列表中引用它...)
  • 有些数据类型不同。我认为主要是 BOOLEAN(但谁使用它 ;-))还有一些我认为与 DATETIME 类型/格式的细微差别。
  • 一些函数名称不同(SUBSTRING 与 SUBSTR 等...)

刚刚发现似乎是 good resource about differences between SQL implementations 的东西.

阅读其他人的回复,是的,DDL,可能是个问题。我不这么认为,可能是因为很多应用程序不需要 DDL,您只需要立即设置数据模式等,然后只需使用 SQL 来查询、添加或更新数据。

关于java - 同时支持Oracle和MySQL : how similar is their SQL syntax?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1733273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com