Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Probleme beim Ändern des Datums mit einem Trigger in Oracle

Sie wollen so etwas:

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;

Es aktualisiert jedoch die Tabelle, die der Trigger überwacht, und es scheint wahrscheinlich, dass der Trigger Aktualisierungen verursacht, die den Trigger erneut aufrufen und einen mutierenden Tabellenfehler erhalten.

Möglicherweise ist es besser, Ihre Geschäftslogik in eine gespeicherte Prozedur einzuschließen, in der sie die Aktualisierung der vorherigen Zeilen durchführen und dann die Einfügung/Aktualisierung durchführen kann. Rufen Sie dann die gespeicherte Prozedur auf, anstatt DML-Anweisungen direkt für die Tabelle auszuführen.