1

私は3つのテーブルを持っています

  • 明細書
  • 録音

Recording には、DateRecored という列があります。請求書には期日という列があり、ハウスには運用という列があります。

請求書の期限が 60 日過ぎた場合に [運用中] 列が非アクティブに変わるように、制約を作成する必要があります。

情報が必要な場合はお知らせください。必要なのはこれだけだと思います。

4

2 に答える 2

1

制約は、レコードを挿入/更新/削除する場合にのみ有効になります。あなたの場合、Bill テーブルの特定のレコードの年齢は、別のテーブルの変更をトリガーする必要があり、この操作を実行するには定期的なジョブが必要です。DBMS は、ユーザーがトリガーする DML 操作なしでは、この種の自動更新 (トリガーまたは制約による) を促進しません。

于 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;
/

これにより、特定の更新が毎日午前 0 時に実行されるようにスケジュールされます。

于 2012-10-21T08:39:24.323 に答える