次のようなものが必要です:
CREATE OR REPLACE TRIGGER TRIGGER_D
BEFORE
INSERT OR UPDATE ON CONTRACTS
FOR EACH ROW
DECLARE
BEGIN
UPDATE CONTRACTS
SET ENDDATE = :NEW.STARTDATE - INTERVAL '1' DAY
WHERE CLIENTID = :NEW.CLIENTID
AND ENDDATE > :NEW.STARTDATE
AND STARTDATE < :NEW.STARTDATE;
END;
ただし、トリガーが監視しているテーブルを更新しているため、トリガーによって更新が発生し、トリガーが再度呼び出され、テーブルの変更エラーが発生する可能性があります。
前の行で更新を実行してから挿入/更新を実行できるストアドプロシージャでビジネスロジックをラップする方がよい場合があります。次に、テーブルに対して直接DMLステートメントを実行するのではなく、代わりにストアドプロシージャを呼び出します。