我有这张桌子:
penalities(player,dateofpenality,penalityDays,status)
根据某些条件,玩家会添加到此表中,状态为“是”。我希望他的身份在刑期(= penalityDays)消失后更改为“否”。
我想到了日期触发器,但在plsql中找不到它。 请注意,由于我需要历史记录,因此我不想删除播放器。
答案 0 :(得分:1)
唯一的方法是安排每天开始一次的后台作业。
编写一个简单的存储过程以应用状态更改:
create or replace procedure update_penalty_status as
begin
update penalties
set status = 'no'
where sysdate >= dateofpenality + penalityDays
and status = 'yes';
commit;
end update_penalty_status;
然后提交作业,每天运行一次。它使用的是DBMS_SCHEDULER(自10g起可用),而不是旧的DBMS_JOB。
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'your_schema.my_job1',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN update_penalty_status; END;',
start_date => trunc(sysdate)+1,
repeat_interval => 'FREQ=DAILY'
enabled => TRUE,
comments => 'Revoke expired penalties');
END;
/
请注意,您将需要CREATE JOB权限才能执行此操作。您可能需要向DBA寻求帮助和指导。通常,我现在会链接到Oracle文档,但是我认为the Oracle-Base article是一个更友好的起点。