私は3つのテーブルを持っています
- 明細書
- 録音
- 家
Recording には、DateRecored という列があります。請求書には期日という列があり、ハウスには運用という列があります。
請求書の期限が 60 日過ぎた場合に [運用中] 列が非アクティブに変わるように、制約を作成する必要があります。
情報が必要な場合はお知らせください。必要なのはこれだけだと思います。
私は3つのテーブルを持っています
Recording には、DateRecored という列があります。請求書には期日という列があり、ハウスには運用という列があります。
請求書の期限が 60 日過ぎた場合に [運用中] 列が非アクティブに変わるように、制約を作成する必要があります。
情報が必要な場合はお知らせください。必要なのはこれだけだと思います。
制約は、レコードを挿入/更新/削除する場合にのみ有効になります。あなたの場合、Bill テーブルの特定のレコードの年齢は、別のテーブルの変更をトリガーする必要があり、この操作を実行するには定期的なジョブが必要です。DBMS は、ユーザーがトリガーする DML 操作なしでは、この種の自動更新 (トリガーまたは制約による) を促進しません。
以前に回答したように、探しているのは制約ではなくトリガーです。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;
/
これにより、特定の更新が毎日午前 0 時に実行されるようにスケジュールされます。