這一篇算是對近期自己學習的一個心得總結
一、oracle的面向對象
SQL是面向集合的這個大家都知道,但是不可否認現在的oracle中有很多地方都體現著面向對象的思維。(這也算是各大語言殊途同歸的一個征兆吧)
為什麼說oracle中有很多的面向對象的思維呢?舉一個例子來說明一下,我覺得最能體現出來這一點要算是游標了,當然還有包(package)
begin declare cursor students is select sid,name,age,hobby from my_test; student students%rowtype; begin for student in students loop dbms_output.put_line('學號:'||student.sid||'學生姓名:'||student.name||';'); end loop; end; end; --運行結果 學號:76學生姓名:joy; 學號:77學生姓名:joy; 學號:78學生姓名:joy; 學號:79學生姓名:joy; 學號:80學生姓名:joy; 學號:81學生姓名:joy; 學號:82學生姓名:joy; 學號:83學生姓名:joy; 學號:84學生姓名:joy; 學號:85學生姓名:joy; 學號:86學生姓名:joy; 學號:87學生姓名:joy; 學號:88學生姓名:joy; 學號:89學生姓名:joy; ……
其中的for循環有沒有很有C#中foreach的趕腳呢?
student.sid沒有有對象的趕腳呢?
另外包(package)也是一個具有很強的面向對象的家伙兒,比如最常使用的dbms_output.put_line()等等一些內置的函數,很有面向對象中類和方法的趕腳,只是oracle不這麼叫罷了。面向對象是一種思維模式,也許oracle在不斷的更新過程中也借鑒了一些這方面的內容,方便開發者更加快速更加舒服的使用也說不定。
接下來在談談oracle的面向集合
二、oracle的面向集合
SQL是面向集合的,在oracle集合這篇博客中自己也寫了一些東西,此處著重寫一些自己在這方面的一些見解。
關系型數據庫是按照一定的關系把業務數據按照一定的相同性整合在一起,SQL語句是為了更好的處理這些數據而存在的,所以想要提升SQL的效率,很多時候就需要知道oracle到底是怎麼工作的,他在運行一段SQL語句時,是按照什麼樣的順序來實現自己對於數據的處理的,這就牽扯到了解釋計劃和執行計劃。
oracle10g以後采用的是基於開銷的優化器(CBO),通過統計出來的一些數據來運行眾多執行計劃中的一種,當然這一種並不一定是最高效和穩定的。
用集合的思想來進行編程,為的就是盡可能的減少對數據塊的讀取,因為一般情況下在I/O方面花費的效率還是很可觀的,另外使用面向集合的方法也可以使SQL看起來更加的簡潔明了,優雅動人。不過這些需要一個過程
最後借用別人的一句話,做一個虎頭虎腦的結尾:誰都能寫出計算機認識的代碼,但是只有有思想的程序員才能寫出人人都能看懂的程序代碼