- 在 9i 中有效的 SQL 语句在 11g 中仍然有效吗?
- 11g 中是否有 9i 中没有的新功能?
- 有效的 9i SQL 语句和 11g 中的相同语句之间是否存在行为差异?
3 回答
- 在 9i 中有效的 SQL 语句在 11g 中仍然有效。Oracle 非常努力地确保向后兼容。当然,在某些情况下,旧版本的 Oracle 接受了实际上在语法上无效的 SQL 语句,而不是在更高版本正确引发错误的情况下引发错误。但这非常罕见。 
- 如果您对已在不同版本的 Oracle 中添加的功能感兴趣,那么您最好阅读新功能指南的 SQL 语言改进一章和SQL 参考的 SQL 语言一章的新增功能。 
- 如果您要询问行为差异,那主要是对错误假设的依赖。例如,很多人认为 - ORDER BY如果查询包含- GROUP BY. 这绝不是 Oracle 鼓励的假设,但 Oracle 碰巧对数据进行排序以执行- GROUP BY. 在10.2 中添加 hash group by 操作后,Oracle 不再总是将数据排序为数据分组的副产品。这导致许多开发人员不得不返回代码来添加- ORDER BY子句。由于不同的优化器设置,其他 SQL 语句在 11g 中的执行方式不同(特别是如果您从 9i 中的基于规则的优化器迁移)。
在 9i 中有效的 SQL 语句在 11g 中是否仍然有效
在某些情况下,以前有效的 SQL 语句在以后的版本中变得无效。例如,Oracle 8 和 9 之间的 IIRC,该mod函数用作中缀运算符变得非法;ieselect 12 mod 3 from dual在 Oracle 8 中有效,但在 Oracle 9select mod(12,3) from dual中无效。(在两个版本中都有效)
11g 中是否有 9i 中没有的新功能
是的,当然,但列出它们将超出此答案的范围。
有效的 9i SQL 语句和 11g 中的相同语句之间是否存在行为差异
存在可能导致不良“影响”的行为差异。两个例子:
- 查询优化器。在每个新版本中,由于新的查询优化器可能会选择与旧的查询优化器不同的、劣质的计划,因此某些查询的执行速度可能会显着变慢。 
- 分组依据:在 Oracle 9i 之前, - group by提供排序结果。(- order by不完全相同- order by的顺序- group by像. 因此,许多开发人员在该子句与该子句- order by相同时省略了该- group by子句。这在 Oracle 10g 中发生了变化,显然 10g 使用哈希表而不是排序树进行分组。正因为如此,一些程序在 10g 中提供的结果与在 9i 中不同。 (注意:忽略预期的排序结果一直是个坏主意)- order by
是的当然。查看 Oracle Database SQL Language References 的第一章,例如http://docs.oracle.com/cd/B28359_01/server.111/b28286/wnsql.htm#sthref5