在Oracle數據庫上,如何執行下面的邏輯(即「等到至少有一行返回並返回列值」),但沒有輪詢(循環,浪費CPU和可能的I/O),但是有一些等待/阻止機制? 因此,當調用get_one()函數時,它不應該返回,直到它可以從匹配一些條件的表中獲取一行爲止。如何等待查詢返回行?
function get_one()
return number
is
c1 sys_refcursor;
n number;
begin
loop
open c1 for select number_column from t1 where some_conditions;
fetch c1 into n;
if not c1%notfound then return n;
close c1;
dbms_lock.sleep(1); -- this wait reduces load, but is still polling, also it delays reaction time
end loop;
end;
的解決方案應爲外部應用程序的工作(比如與J2EE,.NET和類似應用服務器),所以使用觸發器可能會不適合。
也許你可以利用這個函數使用的資源,通過調用方法呢?他們會一直等待這些信息,我不確定從資源的角度來看它是怎麼樣的。 – Sebas 2014-10-29 17:39:06
等待一個事件是一個相當普遍的編程模式,調用者會沒事的。 – 2014-10-30 09:24:15