2010-06-27 38 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