Bạn muốn một cái gì đó như thế này:
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;
Tuy nhiên, nó đang cập nhật bảng mà trình kích hoạt đang theo dõi và có vẻ như trình kích hoạt sẽ gây ra các bản cập nhật sẽ gọi lại trình kích hoạt và nhận được lỗi bảng thay đổi.
Tốt hơn là bạn nên gói logic nghiệp vụ của mình trong một quy trình được lưu trữ nơi nó có thể thực hiện cập nhật trên các hàng trước đó và sau đó thực hiện chèn / cập nhật. Sau đó, thay vì thực hiện các câu lệnh DML trực tiếp trên bảng, hãy gọi thủ tục được lưu trữ.