plsql - PLSQL 是否可以在某个日期更新表列?
问题描述
我有这张桌子:
penalities(player,dateofpenality,penalityDays,status)
根据某些标准,玩家被添加到此表中,状态变为“是”。我希望他的状态在惩罚期(=penalityDays)结束后改为“否”。
我想到了一个日期触发器,但我在 plsql 中找不到它。请注意,我不想删除播放器,因为我需要历史。
解决方案
做到这一点的唯一方法是安排一个每天启动一次的后台作业。
编写一个简单的存储过程来应用状态更改:
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 文档,但我认为Oracle-Base 文章是一个更友好的起点。
推荐阅读
- javascript - Clipboard.js 循环按钮
- android - 改造预期 BEGIN_OBJECT 但在 POST 方法中是 BEGIN_ARRAY
- javascript - 如何更改 Ckeditor 的默认字体?
- python - Python - 有没有办法自动化这个?
itertools.product
- python - 如何阅读 django 调试器给我的这一行?(无反向匹配)
- ios - iOS Rxswift 处理 CancelButton 点击 searchBar
- ios - IOS/Storyboard:图像在长时间重做后从身份检查器中消失,但在 Storyboard 中仍然可见
- react-native - 在 react native 中链接只能打开一个应用
- python - 具有子数组和可变长度的 numpy 关联数组的最佳生成
- java - 生物特征认证java应用程序。如何在智能手机和应用程序之间建立连接