1

我有三张桌子

  • 账单
  • 记录
  • 房子

在录制中,我有一个名为 DateRecored 的列。在 bill 中,我有一个名为 duedate 的列,而在 House 中,我有一个名为 Operational 的列。

我需要做一个限制,以便当账单逾期 60 天时,Operational 列将变为停用。

如果您需要信息,请告诉我,但我觉得这就是您所需要的。

4

2 回答 2

1

约束仅在您插入/更新/删除记录时生效。在您的情况下,Bill 表中给定记录的年龄应该触发不同表中的更改,并且您需要定期作业来执行此操作。如果没有任何用户触发的 DML 操作,DBMS 不会促进这种自动更新(通过触发器或约束)。

于 2012-10-21T08:26:10.130 回答
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;
/

这会将给定的更新安排在每天午夜执行。

于 2012-10-21T08:39:24.323 回答