2012-12-03 179 views
0
  1. 9i中有效的SQL語句在11g中仍然有效嗎?
  2. 11g中有沒有9i中沒有的新功能?
  3. 有效的9i SQL語句和11g中的同一語句之間是否存在行爲差異?
+1

會接受「是」作爲答案嗎? –

+0

你問:「9i中有效的SQL語句在11g中仍然有效嗎?」你問:「11g中有沒有9i中沒有的新功能?」您是否問:「有效的9i SQL語句與11g中的同一語句之間是否存在行爲差異?」或者你在問別的嗎? –

+0

@Justin Cave:謝謝巴迪。我無法制定問題。是的..你能給我所有你提到的問題的答案嗎? – Shreedhar

回答

2
  1. 這是在9i中有效的SQL語句仍是在11g中有效。 Oracle非常努力地確保向後兼容性。當然,在某些情況下,舊版本的Oracle接受實際上語法上無效的SQL語句,而不是在後面的版本正確引發錯誤時引發錯誤。但這是非常罕見的。

  2. 如果您對不同版本的Oracle中添加的功能感興趣,您可以通過SQL Language Improvements chapter of the New Features GuideWhat's New in the SQL Language chapter of the SQL Reference查看。

  3. 如果您問的是行爲差異,那麼主要是依靠錯誤的假設。例如,如果查詢包含GROUP BY,大量人認爲他們不需要指定ORDER BY子句。這從來不是甲骨文鼓勵的假設,但甲骨文碰巧爲了做GROUP BY而對數據進行排序。當hash group by operation was added in 10.2時,Oracle不再總是將數據排序爲數據分組的副產品。這導致很多開發人員不得不通過代碼添加ORDER BY子句。由於不同的優化器設置,其他SQL語句在11g中的表現會有所不同(特別是如果您從9i中的基於規則的優化器移動)。

1

是的,當然。看一看Oracle數據庫SQL語言參考的第一章,例如http://docs.oracle.com/cd/B28359_01/server.111/b28286/wnsql.htm#sthref5

+0

你能舉一些例子嗎?因爲我對oracle 9i有相當不錯的知識:SQL,現在我正在通過oracle11g:SQL。但沒有找到任何區別。 – Shreedhar

+0

10.1新數據類型BINARY_FLOAT,新函數REGEXP_LIKE,回收站。 11.1 PIVOT,虛擬列,11.2延遲段創建... –

2

是,這是在9i中有效仍然有效在11g

已經有場合以前有效的SQL語句SQL語句在更高版本中失效。例如,Oracle 8和Oracle 9之間的IIRC,mod函數成爲非法用作中綴運算符;即select 12 mod 3 from dual是Oracle 8,但不是在甲骨文9有效(select mod(12,3) from dual是有效的兩個版本)

是否有11g中的新功能,無法獲得9i中

是的,當然,但列出它們會超出這個答案的範圍。

是在11g

有行爲上的差異,可能導致不必要的「效果」有效的9i的SQL語句和相同的語句之間存在行爲上的差異。兩個示例:

  1. 查詢優化器。在每個新版本中,有些查詢執行速度明顯較慢,這是因爲新查詢優化器可能會選擇與舊查詢優化器不同的低級計劃。

  2. 分組方式:在Oracle 9i之前,group by提供了排序結果。 (與order by不完全相同,因爲order by考慮到語言特定的順序,例如德語爲「L,M,N,O,Ö,P,Q」,而group by沒有,但它很好足夠用於許多目的)。因此,許多開發人員在與group by子句相同時忽略了order by子句。這在Oracle 10g中發生了變化,顯然10g使用散列表而不是排序樹來進行分組。因此,有些計劃在10g中的表現與9i相比有所不同。 (注:它一直是一個壞主意,省略order by當訂購測試結果正常)

相關問題