Oracle
 sql >> Database >  >> RDS >> Oracle

Problemi nel modificare la data con un trigger in Oracle

Vuoi qualcosa del genere:

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;

Tuttavia, sta aggiornando la tabella monitorata dal trigger e sembra probabile che il trigger provochi aggiornamenti che invocheranno nuovamente il trigger e visualizzeranno un errore di tabella mutante.

Potrebbe essere meglio racchiudere la logica aziendale in una stored procedure in cui può eseguire l'aggiornamento sulle righe precedenti e quindi eseguire l'inserimento/l'aggiornamento. Quindi, invece di eseguire istruzioni DML direttamente sulla tabella, richiama invece la procedura memorizzata.