我们在一个项目中使用 Oracle,并希望也支持 MySQL。他们的 SQL 方言有多接近?
是否有可能在没有太多体操的情况下为两者使用相同的 SQL 源?
细节:
- 我们正在使用 iBatis,这是一个持久性管理器,可以将 SQL 语句干净地隔离到资源文件中。但是我们在 SQL 级别工作,这有其优点(和缺点)。
- 我们不希望迁移到像 Hibernate 这样的对象关系映射器,这将完全保护我们免受方言差异的影响。
- 我们努力保持 Oracle SQL 的通用子集。
- 没有 PL/SQL。
- 我们不使用存储过程或触发器(无论如何)。
- 我们使用检查约束、唯一约束和外键约束。
- 我们使用 ON DELETE CASCADEs。
- 我们使用事务(在 iBatis API 级别完成)。
- 我们在查询中调用了一些 Oracle 时间戳函数。
- 我们将使用带有 MySQL 的 InnoDB 存储引擎(它支持事务和约束)。
所以你的想法是什么?我们是否需要维护两组不同的 iBatis SQL 资源文件,一个用于每种方言,或者是否有可能拥有一组同时支持 MySQL 和 Oracle 的 SQL?
最后更新:感谢所有答案,尤其是指向 Troels Arvin 的差异页面的指针。真的很遗憾,标准不是更多,嗯,标准。对我们来说,问题是 MySQL 自动增量与 Oracle 序列,MySQL LIMIT 与 Oracle Rowumber(),也许还有一两个奇怪的函数。正如@mjv 指出的那样,大多数其他东西都应该很容易转移,以一些编辑为模,以确保我们使用 SQL-92。更大的问题是某些查询可能需要在每个 DBMS 中进行不同的手动优化。