Anda menginginkan sesuatu seperti ini:
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;
Namun, ini memperbarui tabel yang dipantau oleh pemicu dan tampaknya pemicu akan menyebabkan pembaruan yang akan memanggil pemicu lagi dan mendapatkan kesalahan tabel mutasi.
Anda mungkin lebih baik untuk membungkus logika bisnis Anda dalam prosedur tersimpan di mana ia dapat melakukan pembaruan pada baris sebelumnya dan kemudian melakukan penyisipan/pembaruan. Kemudian, daripada menjalankan pernyataan DML secara langsung di atas meja, alih-alih memanggil prosedur tersimpan.