天天看點

ORACLE存儲過程學習(一)

  作為一枚剛入職,或者渴望入職的程式員來說。很多時候面試的時候會問到一個問題,有沒有資料庫調優相關經驗。或者直白一點,你用過了解過哪些資料庫?當然泛泛而談的的回答可能是,“有用過MySql,了解過Oracle...”。其實答到這兒的時候,基本上就會有下一個問題,有了解過存儲過程,觸發器嗎?談到這兒可能很多人都會卡殼,畢竟對于剛要入職的小白來說這兩個詞彙顯得優先生僻了。那麼本篇文章,大緻跟大家聊一下有關存儲過程的二三事。

  筆者從入行時一直在做企業級應用開發(ERP一塊),最開始我也隻是會用DDL、DML 語句,當然了在背景業務的開發中熟練的使用這些是基本的要求,畢竟大多數的邏輯就是CRUD。但是後來随着功能的複雜性增加,突然有一天發現程式在執行一個查詢過程時變得非常慢(資料樣本過大,五表聯查),究其原因發現原來是sql編譯太慢了,再加上一味地用Left join 導緻程式假死。後來在當時的經理的指導下,一張視圖(View)搞定了。當時就覺得異常神奇,後來再自己的百度,以及嘗試下寫了第一個過程,建了第一張視圖。自此資料庫層面有提高了一點點。

  回到正題,很多人問存儲過程是什麼呢?其實存儲過程就是在資料庫層面去做CRUD,可以完全脫離程式而獨立運作。在這sql中加上相關的表操作。當然了,這些操作理論上完全通過程式去做也是可行的。那麼為什麼會多此一舉呢?萬事萬物皆有它存在的意義。後面來講講他的優點

(一)存儲過程處理比較複雜的業務時比較實用。

比如,一個複雜的資料操作(涉及到多次查詢多次判斷且要用一個事物去控制),如果你在前台處理的話,可能會涉及到多次資料庫連接配接。但如果你用存儲過程的話,隻需要傳幾個關鍵參數,然後擷取結果集(Status)。從響應時間上來說有絕對優勢,将應用伺服器的壓力分給了資料庫服務。

也就是說存儲過程可以給我們帶來運作效率提高的好處。

另外,程式容易出現 BUG 不穩定,而存儲過程,隻要資料庫不出現問題,基本上是不會出現什麼問題的。也就是說從安全上講,使用了存儲過程的系統更加穩定。

(二)大量資料處理

在開發過程中涉及到在一個方法中處理大量資料,資料與資料之間打交道的話,過程會比程式來的快的多。面試官問有沒有用存儲,實際上就是想知道前來面試的程式員到底做過資料量大的項目沒。

是以,要想進大公司,沒有豐富存儲過程經驗,是不行的。

(三)與背景程式脫離

存儲過程固化在資料庫,與開發的語言無關,隻要正确的調用,參數傳遞正确。不需要根據程式設計語言的不同再去做相關的修改,一般不做大的修改。當需要有多次調用時不需要再次編寫,且過程隻在建立完畢一次編譯。

上面就是我總結的有關存儲過程使用的一些優點,缺點也很明顯。正因為存儲過程是一次建立,當應用運作時間很長需要更新的話如果涉及到存儲過程的修改需要異常謹慎,且繁瑣(有可能需要手動調曆史資料,且背景程式也要相應的改變),對背景對接的程式來說改動量巨大。

其他的還在探索中。。。不定時更