0
  1. 在 9i 中有效的 SQL 语句在 11g 中仍然有效吗?
  2. 11g 中是否有 9i 中没有的新功能?
  3. 有效的 9i SQL 语句和 11g 中的相同语句之间是否存在行为差异?
4

3 回答 3

3
  1. 在 9i 中有效的 SQL 语句在 11g 中仍然有效。Oracle 非常努力地确保向后兼容。当然,在某些情况下,旧版本的 Oracle 接受了实际上在语法上无效的 SQL 语句,而不是在更高版本正确引发错误的情况下引发错误。但这非常罕见。

  2. 如果您对已在不同版本的 Oracle 中添加的功能感兴趣,那么您最好阅读新功能指南的 SQL 语言改进一章和SQL 参考的 SQL 语言一章的新增功能。

  3. 如果您要询问行为差异,那主要是对错误假设的依赖。例如,很多人认为ORDER BY如果查询包含GROUP BY. 这绝不是 Oracle 鼓励的假设,但 Oracle 碰巧对数据进行排序以执行GROUP BY. 在10.2 中添加 hash group by 操作后,Oracle 不再总是将数据排序为数据分组的副产品。这导致许多开发人员不得不返回代码来添加ORDER BY子句。由于不同的优化器设置,其他 SQL 语句在 11g 中的执行方式不同(特别是如果您从 9i 中的基于规则的优化器迁移)。

于 2012-12-03T12:45:34.080 回答
2

在 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 中的相同语句之间是否存在行为差异

存在可能导致不良“影响”的行为差异。两个例子:

  1. 查询优化器。在每个新版本中,由于新的查询优化器可能会选择与旧的查询优化器不同的、劣质的计划,因此某些查询的执行速度可能会显着变慢。

  2. 分组依据:在 Oracle 9i 之前,group by提供排序结果。(order by不完全相同order by顺序group by像. 因此,许多开发人员在该子句与该子句order by相同时省略了该group by子句。这在 Oracle 10g 中发生了变化,显然 10g 使用哈希表而不是排序树进行分组。正因为如此,一些程序在 10g 中提供的结果与在 9i 中不同。 (注意:忽略预期的排序结果一直是个坏主意)order by

于 2012-12-03T12:45:03.517 回答
1

是的当然。查看 Oracle Database SQL Language References 的第一章,例如http://docs.oracle.com/cd/B28359_01/server.111/b28286/wnsql.htm#sthref5

于 2012-12-03T12:06:40.633 回答