sql >> Databasteknik >  >> RDS >> Oracle

Problem med att ändra datum med en trigger i oracle

Du vill ha något sånt här:

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;

Det är dock en uppdatering av tabellen som utlösaren övervakar och det verkar troligt att utlösaren kommer att orsaka uppdateringar som kommer att anropa utlösaren igen och få ett muterande tabellfel.

Det kan vara bättre att linda in din affärslogik i en lagrad procedur där den kan utföra uppdateringen på de föregående raderna och sedan göra infogningen/uppdateringen. Anropa sedan den lagrade proceduren istället för att utföra DML-satser direkt på bordet.




  1. Hur hittar man de privilegier och roller som ges till en användare i Oracle?

  2. HTML &PHPMySQL, infoga många data i tabellen från textområdet

  3. Hur man släpper en kolumn med en begränsning i SQL Server

  4. Få timmar och minuter (TT:MM) från datum