答案 0 :(得分:3)
在9i中有效的SQL语句在11g中仍然有效。 Oracle非常努力地确保向后兼容性。当然,在某些情况下,旧版本的Oracle接受的SQL语句实际上在语法上无效,而不是在更高版本正确引发错误时引发错误。但这种情况非常罕见。
如果您对已在不同版本的Oracle中添加的功能感兴趣,您可以通过SQL Language Improvements chapter of the New Features Guide和What's New in the SQL Language chapter of the SQL Reference查看。
如果您询问行为差异,那些主要是依赖于错误的假设。例如,如果查询包含ORDER BY
,则大量人员认为他们不需要指定GROUP BY
子句。这绝不是甲骨文鼓励的假设,但Oracle碰巧对数据进行排序以便执行GROUP BY
。当hash group by operation was added in 10.2时,Oracle不再总是将数据排序为分组数据的副产品。这导致许多开发人员不得不通过代码返回添加ORDER BY
子句。由于优化器设置不同,其他SQL语句在11g中的执行方式不同(特别是如果您从9i中的基于规则的优化器移动)。
答案 1 :(得分:2)
在9i中有效的SQL语句在11g中是否仍然有效
以前有效的SQL语句在以后的版本中变得无效。例如,Oracle 8和9之间的IIRC,mod
函数变为非法用作中缀运算符;即select 12 mod 3 from dual
在Oracle 8中有效,但在Oracle 9中无效。(select mod(12,3) from dual
在两个版本中均有效)
11g中是否有新功能在9i中无法使用
是的,当然,但列出它们会超出这个答案的范围。
有效的9i SQL语句与11g中的相同语句之间是否存在行为差异
行为差异会导致不必要的“影响”。两个例子:
查询优化程序。在每个新版本中,由于新的查询优化器可能会选择与旧查询优化器不同的劣质计划,因此某些查询的执行速度可能会略微降低。
分组依据:在Oracle 9i之前,group by
提供了排序结果。 (与order by
不完全相同的顺序,因为order by
考虑了语言特定的顺序,例如“L,M,N,O,Ö,P,Q”在德语中,虽然group by
没有,但它已经足够用于许多目的)。因此,许多开发人员在order by
子句与group by
子句相同时会省略order by
子句。在Oracle 10g中发生了变化,显然10g使用哈希表而不是排序树进行分组。因此,有些程序在10g中比在9i中提供了不同的结果。
(注意:在预期订购结果时省略{{1}}始终是个坏主意)
答案 2 :(得分:1)
是的,当然。查看Oracle数据库SQL语言参考的第一章,例如http://docs.oracle.com/cd/B28359_01/server.111/b28286/wnsql.htm#sthref5