2

我正在为拍卖创建一个数据库,其中有一个表,用于存储要拍卖的项目的条目。

create table items(
item_ID number(5) PRIMARY KEY,
SDate DATE NOT NULL,
EDate DATE NOT NULL, //end date for auction
minBid number(5,2) NOT NULL,
bidInc number(2,2) NOT NULL,
title varchar2(20) NOT NULL,
descr varchar2(255),
currentBid number(5,2)
)

现在结束日期过去后,我希望数据库自动从表中删除该条目。
我该怎么做?

4

2 回答 2

3

好吧,您可以在数据库中编写一个作业,它将删除早于 X 时间的行,但是由于您将其标记为 C#,我猜您希望它在您的拍卖应用程序中完成。

在这种情况下,您可以创建一个Timer将在DELETE FROM items WHERE EDate > XXX每次运行时运行查询。

编辑:在这种情况下,您可以定义一个将删除旧行的存储过程,然后您需要使用DBMS_JOB. 我手头没有 Oracle DB 来测试它,但你可以尝试运行它:

创建一个存储过程:

create or replace procedure delete_old_auctions
as
begin
    delete from items where edate < sysdate
end;

然后您需要创建一个作业,该作业将每 X 次执行此存储过程。

dbms_job.submit(
    what=>'your_db.delete_old_auctions',
    next_date=>sysdate+1/24,    -- start next hour
    interval=>'sysdate+1/24');  -- Run every hour
于 2012-09-22T15:11:24.870 回答
2

所有那些陷入类似解决方案的人都是这样做的。

第 1 步:创建程序

create procedure item_delete as
begin
delete from items where edate<sysdate
end;

第 2 步:使用 DBMS_SCHEDULER 自动化

DBMS_SCHEDULER.create_job (
job_name        => 'delete_old_items',
job_type        => 'STORED_PROCEDURE',
job_action      => 'exec item_delete',
start_date      => sysdate,
repeat_interval => 'freq=daily; byhour=0;byminute=0;bysecond=0;',
end_date        => NULL,
enabled         => TRUE
);
END;


参考
http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_sched.htm#i1000363

于 2012-09-22T17:32:34.570 回答