sql >> Databáze >  >> RDS >> Oracle

Problémy se změnou data pomocí spouště v orákulu

Chcete něco takového:

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;

Aktualizuje však tabulku, kterou spouštěč sleduje, a zdá se pravděpodobné, že spouštěč způsobí aktualizace, které znovu vyvolají spouštěč a zobrazí chybu mutující tabulky.

Možná bude lepší zabalit vaši obchodní logiku do uložené procedury, kde může provést aktualizaci na předchozích řádcích a poté provést vložení/aktualizaci. Potom místo provádění příkazů DML přímo v tabulce vyvolejte uloženou proceduru.




  1. umístit více výsledků do jednoho pole

  2. Jak zpozdím sloupce v MySQL?

  3. Uložené procedury v Ruby on Rails

  4. Jak použít cURL k načtení konkrétních dat z webové stránky a poté je uložit do mé databáze pomocí php