我有三张桌子
在录制中,我有一个名为DateRecored的列。在bill中,我有一个名为duedate的列,在House中,我有一个名为Operational的列。
我需要制定约束,以便当账单逾期60天时,“操作”列将更改为停用。
如果您需要信息,请告诉我,但我觉得这就是您需要的全部内容。
答案 0 :(得分:1)
约束仅在插入/更新/删除记录时生效。在您的情况下,Bill表中给定记录的年龄应触发另一个表中的更改,并且您需要定期作业来执行此操作。 DBMS不会在没有任何用户触发的DML操作的情况下促进这种自动更新(通过触发器或约束)。
答案 1 :(得分:0)
如前所述,您正在寻找的是触发器,而不是约束。在Oracle中使用DBMS_SCHEDULER,触发器将如下所示:
BEGIN
DBMS_SCHEDULER.create_job (
job_name => 'update_operational_after',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN UPDATE house set operational=false where id in (select house.id from House join Bill on (bill.house_id=house.id) where duedate > sydate+60; END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'freq=daily; byminute=0;byhour=0;byminute=0;bysecond=0',
end_date => NULL,
enabled => TRUE,
comments => 'Updates all operational to false if they've passed the due date');
END;
/
这会安排每天午夜执行给定的更新。