Oracle的物件導向與面向集合
這一篇算是對近期自己學習的一個心得總結
一、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看起來更加的簡潔明了,優雅動人。不過這些需要一個過程。
最後借用別人的一句話,做一個虎頭虎腦的結尾:誰都能寫出電腦認識的代碼,但是只有有思想的程式員才能寫出人人都能看懂的程式碼。
本文永久更新連結地址:
本文永久更新連結地址: