Trigger BEFORE DELETE Oracle

0

Posiadam jeszcze jeden problem z triggerem, a mianowicie chciałbym, żeby przy usuwaniu klienta wywołał się trigger, który usunie wszystkie wiersze z nim związane w dwóch kolejnych tabelach. Sam DELETE działa poprawnie, jednak w triggerze nie chce się skompilować. W czym jest problem?

 CREATE OR REPLACE TRIGGER TR3_USUWANIE 
BEFORE DELETE ON KLIENT
REFERENCING new AS new old AS old
FOR EACH ROW

BEGIN
  DELETE FROM POZYCJA
  WHERE POZYCJA.ID_Z IN
  (
    SELECT DISTINCT P.ID_Z
    FROM KLIENT K, ZAMOWIENIE Z, POZYCJA P
    WHERE P.ID_Z = Z.ID_Z AND Z.ID_K = K.ID_K AND old.ID_K = K.ID_K
  );

DELETE FROM ZAMOWIENIE
  WHERE ZAMOWIENIE.ID_Z IN
  (
    SELECT DISTINCT Z.ID_Z
    FROM KLIENT K, ZAMOWIENIE Z
    WHERE Z.ID_K = K.ID_K AND old.ID_K = K.ID_K
  );
END;
0

Takie rzeczy to nie na wyzwalaczu, tylko na kluczu obcym się robi. ON DELETE CASCADE

0

Ale problem jest taki, że się nie da, czy nie powinno się tak robić?

0

Ta baza, to tylko projekt na zajęcia, w którym mają być przedstawione przykłady niebanalnych funkcji, procedur itp. Nie muszą odwzorowywać aż tak dokładnie rzeczywistej bazy danych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1