2010-06-27 40 views
0

我正在創建一個圖書館系統。我如何在觸發器中動態創建工作計劃?

當一本書被保留時,如果保留的用戶沒有借用它,我希望它在3天內自動將狀態更改回「可用」。

我可以創建一個觸發器,當狀態改變爲火,以「保留」,但我失去了對創建工作在3天內發生和將狀態改回爲「可用」

任何意見,建議和指導將不勝感激:)

+3

下面有幾個答案實現你的想法,改變存儲的STATUS值。另一種方法是讓應用程序存儲reserved_on_date並計算可用性,即可用性:=(sysdate - reserved_on_date)> 3.這消除了對異步作業不起作用的擔心,並且還讓應用程序顯示剩餘多少時間預約窗口 – dpbradley 2010-06-27 20:15:29

+2

+1給dpbradley的回答。或者,您可以添加一個日期列「available_on」,而不是設置爲「可用」狀態,直到該書可用時爲止。這樣沒有數據需要更新。 – 2010-06-28 04:48:03

回答

3

您應該首先創建一個過程來根據需要更新列,並將其作爲輸入參數作爲書籍ID(或其他任何PK)。

在您的觸發器中,調用dbms_scheduler包的提交過程,並在3天內定義開始日期,無需冗餘,並使用:new.bookid作爲輸入參數運行先前定義的過程。

一旦稍後提交交易,交易將被提交。否則,在事務回滾的情況下,作業也會被回滾。

Nicolas。

+1

事實上,DBMS_SCEDULER會執行隱式提交(與舊的DBMS_JOB不同)。 http://www.pythian.com/news/398/dbms_scheduler-and-implicit-commits/ – 2010-06-27 23:13:40

+0

有趣的是,在那種情況下,最好在DBMS_JOB中工作。 – 2010-06-28 06:51:54

1

你在什麼語言編碼?

通常對於像這樣的東西,我寫一個定期運行的cron作業(每天圖書館前一天一次?),查詢查看所有已保留超過3天的所有內容,並將其設置回可用狀態。

+0

我使用C#作爲GUI。但我想通過數據庫完全處理這個問題。 :) – 2010-06-27 18:15:55