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

Problemer med at ændre datoen med en trigger i oracle

Du vil have noget som dette:

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 er dog ved at opdatere tabellen, som triggeren overvåger, og det virker sandsynligt, at triggeren vil forårsage opdateringer, der vil påkalde triggeren igen og få en mutationstabelfejl.

Det er måske bedre at pakke din forretningslogik ind i en lagret procedure, hvor den kan udføre opdateringen på de foregående rækker og derefter foretage indsættelsen/opdateringen. Så, i stedet for at udføre DML-sætninger direkte på bordet, påkald i stedet den lagrede procedure.




  1. Hvordan vælger man indre samlingsfelt med IF/case?

  2. Qt - Sådan får du|kompilere Mysql-driver

  3. MySQL-forespørgsel - optimeret

  4. Opret SQL-funktion med henvisning til en tabel eller kolonne, der ikke eksisterer (endnu)