plsql 程式設計經驗---引用
平時在PL/SQL中的程式設計中遇到一些問題,這裡以問答的形式來進行把它們總結下來,以供大家分享。
1、當需要向表中裝載大量的資料流或者需要處理大量的資料流的時候,能否使用管道提高處理效率?[@more@]
管道函式對於改善並行查詢的效能非常方便,它加快往表中載入資料的速度。管道函式的使用總結如下兩點:
每當在查詢裡使用PL/SQL函式時,該查詢將被序列化,即一個處理器只能執行一個查詢例項,那麼在這種情況下不可能使用並行查詢(比如在資料倉儲中要經常使用這項技術)。因此,為了使用並行查詢就必須使用管道函式,這樣也就加快了執行的速度。
管道函式的輸入引數必須是一個引用記錄集型別(即ref cursor),而返回的是巢狀表型別(其表中每一行對應每一個引用記錄)。在使用管道函式之前,必須先在程式頭寫上PARALLEL_ENABLE,這樣才能在查詢語句中使用管道函式來處理了。
2. 如何使PL/SQL程式等待一段時間執行?
方法就是使用DBMS_LOCK包的SLEEP函式,可以進行精確定時,其語法為:
DBMS_LOCK.SLEEP (seconds IN NUMBER);
3.需要在一張表插入一條記錄之後等若干秒後再執行另外一個操作,如何在PL/SQL程式裡進行定時操作?
一般的做法是用迴圈作延遲,利用 DBMS_UTILITY的gettime函式來檢測當前的時間,程式程式碼如下:
DECLARE
v_delaytime CONSTANT INTEGER := 100;
v_starttime INTEGER ;
v_endtime INTEGER ;
BEGIN
V_starttime := DBMS_UTILITY.get_time;
V_endtime := DBMS_UTILITY.get_time;
While abs(V_endtime- V_starttime)< v_delaytime loop
/*空迴圈或者簡單的耗時執行語句*/
End loop;
END;
/
另外如果是不同會話(session)之間的定時,就必須使用DBMS_PIPE包的函式來實現會話間的訊息傳遞。
4.當PL/SQL返回一個資料集的時候,該使用集合還是遊標?
一般情況下,有以下兩點作為依據:
1) 如果PL/SQL程式返回多多行資料給另外一個PL/SQL程式的話,這裡就建議使用集合,因為這樣可以利用集合的批收集(bulk collection)來提高從資料庫提取資料的速度。
2) 如果需要在PL/SQL程式的環境中把資料返回到宿主語言環境中(如Sql*plus,c,delphi等),這時應該使用遊標變數來返回這些資料,因為幾乎所有的宿主語言都支援遊標變數,但不是所有的宿主語言都支援集合。這樣可以增強程式的可移植性。
5.如何更有效的在PL/SQL中使用遊標?
遊標是PL/SQL中一個非常重要的概念,對資料庫的檢索主要依靠遊標來操作。在PL/SQL中有兩類遊標,一類是隱式遊標,如select clno into v_clno from table_detail.另外一類是顯式遊標,如cursor v_cur is select clno from table_detail。對於遊標的使用這裡給出以下幾點建議:
1) 儘可能的使用bulk collection。它能夠較大的提高執行效能,在Oracl9i的第二版,甚至可以使用bulk collection來直接將資料寫入到記錄表
2) 儘量使用顯式遊標來處理,因為相對於隱式遊標來說,顯式遊標的速度更快一些。
3) 如果查詢的表很小或者是靜態的,可以把該表快取到一個包級的集合裡。這樣,你的查詢函式就直接從集合裡(即程式全域性區,PGA cache),而不是從系統全域性區(SGA)來取資料,這樣的處理速度會提升很多。
1、當需要向表中裝載大量的資料流或者需要處理大量的資料流的時候,能否使用管道提高處理效率?[@more@]
管道函式對於改善並行查詢的效能非常方便,它加快往表中載入資料的速度。管道函式的使用總結如下兩點:
每當在查詢裡使用PL/SQL函式時,該查詢將被序列化,即一個處理器只能執行一個查詢例項,那麼在這種情況下不可能使用並行查詢(比如在資料倉儲中要經常使用這項技術)。因此,為了使用並行查詢就必須使用管道函式,這樣也就加快了執行的速度。
管道函式的輸入引數必須是一個引用記錄集型別(即ref cursor),而返回的是巢狀表型別(其表中每一行對應每一個引用記錄)。在使用管道函式之前,必須先在程式頭寫上PARALLEL_ENABLE,這樣才能在查詢語句中使用管道函式來處理了。
2. 如何使PL/SQL程式等待一段時間執行?
方法就是使用DBMS_LOCK包的SLEEP函式,可以進行精確定時,其語法為:
DBMS_LOCK.SLEEP (seconds IN NUMBER);
3.需要在一張表插入一條記錄之後等若干秒後再執行另外一個操作,如何在PL/SQL程式裡進行定時操作?
一般的做法是用迴圈作延遲,利用 DBMS_UTILITY的gettime函式來檢測當前的時間,程式程式碼如下:
DECLARE
v_delaytime CONSTANT INTEGER := 100;
v_starttime INTEGER ;
v_endtime INTEGER ;
BEGIN
V_starttime := DBMS_UTILITY.get_time;
V_endtime := DBMS_UTILITY.get_time;
While abs(V_endtime- V_starttime)< v_delaytime loop
/*空迴圈或者簡單的耗時執行語句*/
End loop;
END;
/
另外如果是不同會話(session)之間的定時,就必須使用DBMS_PIPE包的函式來實現會話間的訊息傳遞。
4.當PL/SQL返回一個資料集的時候,該使用集合還是遊標?
一般情況下,有以下兩點作為依據:
1) 如果PL/SQL程式返回多多行資料給另外一個PL/SQL程式的話,這裡就建議使用集合,因為這樣可以利用集合的批收集(bulk collection)來提高從資料庫提取資料的速度。
2) 如果需要在PL/SQL程式的環境中把資料返回到宿主語言環境中(如Sql*plus,c,delphi等),這時應該使用遊標變數來返回這些資料,因為幾乎所有的宿主語言都支援遊標變數,但不是所有的宿主語言都支援集合。這樣可以增強程式的可移植性。
5.如何更有效的在PL/SQL中使用遊標?
遊標是PL/SQL中一個非常重要的概念,對資料庫的檢索主要依靠遊標來操作。在PL/SQL中有兩類遊標,一類是隱式遊標,如select clno into v_clno from table_detail.另外一類是顯式遊標,如cursor v_cur is select clno from table_detail。對於遊標的使用這裡給出以下幾點建議:
1) 儘可能的使用bulk collection。它能夠較大的提高執行效能,在Oracl9i的第二版,甚至可以使用bulk collection來直接將資料寫入到記錄表
2) 儘量使用顯式遊標來處理,因為相對於隱式遊標來說,顯式遊標的速度更快一些。
3) 如果查詢的表很小或者是靜態的,可以把該表快取到一個包級的集合裡。這樣,你的查詢函式就直接從集合裡(即程式全域性區,PGA cache),而不是從系統全域性區(SGA)來取資料,這樣的處理速度會提升很多。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/350519/viewspace-1034776/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 程式設計師的管理經驗程式設計師
- 程式設計師面試經驗程式設計師面試
- 計算機課程程式設計經驗分享計算機程式設計
- 扎心!一個3年經驗的程式設計師經驗之談!程式設計師
- 10個程式設計好習慣:優秀程式設計師的經驗分享程式設計師
- 給程式設計師的幾點程式設計經驗----《編寫高質量程式碼》程式設計師
- Go 併發程式設計中的經驗教訓Go程式設計
- 程式設計師校招筆試經驗小分享程式設計師筆試
- 一個有40年編碼經驗的老外程式設計師的職業經驗程式設計師
- 12年經驗老程式設計師5次轉型程式設計師
- 有經驗的程式設計師應該如何提升自己程式設計師
- 好程式設計師分享Java學習經驗五彈程式設計師Java
- 程式碼編寫之道:十條經驗引領高效程式設計之旅程式設計
- Java程式設計中空指標(NullPointerException)的防範經驗分享Java程式設計指標NullException
- 程式設計師筆記(知識)管理的一點經驗程式設計師筆記
- Linux命令列與shell指令碼程式設計入門經驗Linux命令列指令碼程式設計
- PLSQL程式語言SQL
- 程式設計實驗4程式設計
- 程式設計實驗五程式設計
- 三年開發程式設計師的職場經驗談程式設計師
- 在北京程式設計工作經驗3年可以拿到多少工資?程式設計
- 長沙IT培訓:程式設計師面試專案經驗分享程式設計師面試
- 深度學習模型設計經驗分享深度學習模型
- 經驗分享:eBay的API智慧設計API
- DOE - 最經濟的實驗設計
- C#程式設計:ref【引數按引用傳遞】C#程式設計
- c++ 程式通用多執行緒單例設計 c++ web 框架設計經驗談C++執行緒單例Web框架
- Java實驗二:類程式設計實驗Java程式設計
- 小白必看——一位八年程式設計師的工作經驗程式設計師
- 經驗分享:Java程式設計師的黃金5年你如何突破?Java程式設計師
- 程式設計入門到進大廠,分享一點學習經驗程式設計
- 十年程式設計經驗總結,三點技巧幫你提升程式碼能力!程式設計
- MMORPG技能管線設計經驗總結
- MMORPG聯動&巨型BOSS設計經驗分享
- Rust 程式設計影片教程(進階)——015_2 弱引用Rust程式設計
- Rust 程式設計影片教程對應講解內容-引用Rust程式設計
- 智慧小程式體驗設計指引
- 經典程式設計書籍大全程式設計
- 初級經典程式設計題程式設計