PL/SQL編程經驗小結開發人員網路Oracle

來源:互聯網
上載者:User

正在看的ORACLE教程是:PL/SQL編程經驗小結開發人員網路Oracle。平時在PL/SQL中的編程中遇到一些問題,這裡以問答的形式來進行把它們總結下來,以供大家分享。

  1、當需要向表中裝載大量的資料流或者需要處理大量的資料流的時候,能否使用管道提高處理效率?
管道函數對於改善並行查詢的效能非常方便,它加快往表中載入資料的速度。管道函數的使用總結如下兩點:

  每當在查詢裡使用PL/SQL函數時,該查詢將被序列化,即一個處理器只能運行一個查詢執行個體,那麼在這種情況下不可能使用並行查詢(比如在資料倉儲中要經常使用這項技術)。因此,為了使用並行查詢就必須使用管道函數,這樣也就加快了執行的速度。

  管道函數的輸入參數必須是一個引用記錄集類型(即ref cursor),而返回的是巢狀表格類型(其表中每一行對應每一個引用記錄)。在使用管道函數之前,必須先在程式頭寫上PARALLEL_ENABLE,這樣才能在查詢語句中使用管道函數來處理了。

  2. 如何使PL/SQL程式等待一段時間執行?
 
  方法就是使用DBMS_LOCK包的SLEEP函數,可以進行精確定時,其文法為:

DBMS_LOCK.SLEEP (seconds IN NUMBER);

  3.需要在一張表插入一條記錄之後等若干秒後再執行另外一個操作,如何在PL/SQL程式裡進行定時操作?

  一般的做法是用迴圈作延遲,利用 DBMS_UTILITY的gettime函數來檢測當前的時間,程式碼如下:

   另外如果是不同會話(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)來取資料,這樣的處理速度會提升很多。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.