我正在为拍卖创建一个数据库,其中我有一个表格,用于存储拍卖物品的条目。
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)
)
现在结束日期过后,我希望数据库自动从表中删除该条目 我该怎么做?
答案 0 :(得分:3)
好吧,您可以在数据库中编写一个删除早于X时间的行的作业,但是因为您将其标记为C#我猜你想在拍卖应用程序中完成它。
在这种情况下,您可以创建一个Timer
,每次运行时都会运行DELETE FROM items WHERE EDate > XXX
查询。
编辑:在这种情况下,您可以定义将删除旧行的存储过程,然后您需要使用DBMS_JOB
来安排它。我手头没有Oracle数据库来测试这个,但你可以试试这个:
创建存储过程:
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
答案 1 :(得分: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