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 に答える