Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Problemy ze zmianą daty za pomocą spustu w wyroczni

Chcesz coś takiego:

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;

Jednak aktualizuje tabelę monitorowaną przez wyzwalacz i wydaje się prawdopodobne, że wyzwalacz spowoduje aktualizacje, które ponownie wywołają wyzwalacz i wystąpią błąd mutacji tabeli.

Lepiej może być zawinięcie logiki biznesowej w procedurę składowaną, w której może ona wykonać aktualizację poprzednich wierszy, a następnie wykonać wstawianie/aktualizację. Następnie, zamiast wykonywać instrukcje DML bezpośrednio w tabeli, zamiast tego wywołaj procedurę składowaną.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Limit czasu logowania puli połączeń DBCP

  2. Jak obsłużyć współbieżne wstawiania do DB powodujące naruszenie reguły dla rekordów w bazie danych?

  3. PHP ORA-01745:nieprawidłowa nazwa zmiennej hosta/bind Ostrzeżenie

  4. Jak sklonować użytkownika w Oracle

  5. Instrukcja Delete była bardzo powolna w Oracle