在Oracle11g中自动执行任务

时间:2012-09-22 15:06:37

标签: automation oracle11g

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

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)
)

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

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