Jim*_*ans 5 java mysql sql oracle ibatis
我们在一个项目中使用Oracle,并且也想支持MySQL.他们的SQL方言有多接近?
在没有太多体操的情况下,是否有可能为两者使用相同的SQL源?
细节:
所以你的想法是什么?我们是否需要维护两组不同的iBatis SQL资源文件,每个方言一个,或者是否可以使用一组SQL支持MySQL和Oracle?
最后更新:感谢所有答案,特别是关于Troels Arvin关于差异的页面的指示.令人遗憾的是,标准并不是更好,标准.对我们来说,问题结果是MySQL自动增量与Oracle序列,MySQL LIMIT与Oracle Rowumber(),以及奇数函数或两个.大多数其他一切都应该很容易转移,模拟一些编辑,以确保我们使用SQL-92作为@mjv指出.更大的问题是某些查询可能需要在每个DBMS中进行不同的手动优化.
预计道路上会有一些小的颠簸,但总的来说应该相对容易.
从您当前使用的功能列表中,应该只有少数的synctactic或语义差异,通常很容易修复或解释.您不使用PL/SQL和/或存储过程这一事实是一个优点.一个好的经验法则是尝试坚持大多数DBMS支持的SQL-92,特别是Oracle和MySQL.(注意,这不是SQL-2008的当前SQL标准).
一些差异:
刚刚找到了关于SQL实现之间差异的好资源.
阅读其他人的回复,是的,DDL,可能是一个问题.我打了折扣,可能是因为许多应用程序不需要DDL,您只需要立即设置数据模式等,然后只需使用SQL查询,添加或更新数据.
我相信使用MySQL和Oracle维护一组SQL资源文件,在向后兼容性和解决特定问题之间存在一些缺点.最好为每个SQL引擎都有一个sql,从而最大化每个SQL引擎的功能.
在小册子中看起来相同的特征可以以非常不同的方式实现.
看这些例子
MYSQL
SELECT columns
FROM tablename
ORDER BY key ASC
LIMIT n
ORACLE
SELECT * FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber,
    columns
  FROM tablename
)
WHERE rownumber <= n
MYSQL
SELECT columns
FROM tablename
ORDER BY key ASC
LIMIT n OFFSET skip
ORACLE
SELECT * FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY key ASC) AS rn,
    columns
  FROM tablename
)
WHERE rn > skip AND rn <= (n+skip)
您可以检查此不同SQL实现的比较
| 归档时间: | 
 | 
| 查看次数: | 9953 次 | 
| 最近记录: |