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