2009-02-23 31 views
23

在PL/SQL中有異步調用的任何功能嗎? 假設我在一段代碼中想多次調用一個過程,並且在程序返回時什麼時候以及什麼都不打擾?我們可以在PL/SQL中使用線程嗎?

BEGIN 
    myProc(1,100); 
    myProc(101,200); 
    myProc(201,300); 
    ... 
    ... 

END; 

在上述情況下,我不希望我的代碼等待MYPROC(1100)執行(101,200)
由於之前完成處理。

回答

23

+1 DBMS_SCHEDULER和DBMS_JOB方法,還要考慮是否你應該使用不同的方法。

如果你有一個逐行執行的過程,並且你發現它很慢,那麼答案很可能不是同時多次運行該過程,而是爲了確保使用基於集合的aproach代替。在極端情況下,您甚至可以使用並行查詢和並行DML來減少進程的掛鐘時間。

我提到這只是因爲它是一個非常常見的故障。

+3

一旦你讓實驗室的Parallel提示,每個Tom,Dick和Harry程序員都會把它放在每個查詢中,就好像它是一個參數。 vewy,vewy cawfule。 – 2009-02-23 15:58:35

17

提交的DBMS_JOB像這樣:

declare 
    ln_dummy number; 
begin 
    DBMS_JOB.SUBMIT(ln_dummy, 'begin myProc(1,100); end;'); 
    DBMS_JOB.SUBMIT(ln_dummy, 'begin myProc(101,200); end;'); 
    DBMS_JOB.SUBMIT(ln_dummy, 'begin myProc(201,300); end;'); 
    COMMIT; 
end; 

你需要的JOB_QUEUE_PROCESSES參數設置爲> 0產卵線程來處理作業。您可以通過檢查視圖user_jobs來查詢作業。

請注意,這適用於Oracle 9i,不確定10g具有哪些支持。查看更多信息here

編輯:添加錯過COMMIT

+2

有關信息,DBMS_JOB在Oracle 10g中已由DBMS_SCHEDULER棄用。請參閱http://download.oracle.com/docs/cd/B12037_01/server.101/b10739/jobtosched.htm – 2009-02-23 12:19:30

+0

這樣做的一個訣竅是,在作業實際開始運行之前,您需要執行COMMIT。我見過這個由幾個人錯過了。 – 2009-02-24 01:41:05

5

做並行(多線程)的另一種方式PL/SQL如下所示:

http://www.williamrobertson.net/documents/parallel-plsql-launcher.html

使用DBMS_JOB或dbms_schedular的缺點是,你真的不知道當你的任務完成。我讀到你不打擾,但也許你將來會改變主意。

編輯:

本文http://www.devx.com/dbzone/10MinuteSolution/20902/0/page/1介紹了另一種方式。它使用dbms_jobdbms_alert。警報用於表示作業已完成(回調信號)。

-1

您是否考慮過使用Oracle Advaned Queuing?

9

對於PL/SQL並行處理,你有以下幾種選擇:

這些都將讓你 「模仿」 分叉和PL線程/ SQL。當然,使用這些,您可能會意識到需要在並行執行的程序之間進行通信。這樣做的檢查:

我個人一直使用DBMS_SCHEDULER實現並行處理系統,以及用於DBMS_PIPE 「線程」 之間進行通信。我對這兩者的結合感到非常滿意,我的主要目標(通過特定的重量較輕的程序減少主要加工時間)已經實現!

1

askTom在這裏列出的並行流水線方法提供了一種更復雜的方法,但實際上會暫停直到工作完成,這與DBMS Job技術不同。也就是說,你確實要求「異步」技術,DBMS_JOB是完美的。

5

你在11g中有另一個選項。 Oracle引入了一個與您想要做的事情類似的軟件包,名稱爲DBMS_PARALLEL_EXECUTE

根據他們的說法,「DBMS_PARALLEL_EXECUTE包使用戶可以並行增量更新表數據」。如何使用它一個相當不錯的總結是here

基本上,你定義的方式(由你似乎被路過的一些鍵值,你的情況),甲骨文應該用它來打破你的工作成小塊,然後將其將單獨開始每件作品。爲了使用它,當然有一些小規劃和一些額外的編碼,但沒有什麼是你不應該做的。

使用這種認可方法的優點是Oracle甚至提供了可用於監視每個獨立線程的數據庫視圖。

相關問題