trigger w plsql

0

Witam!

Mam 2 tabele: tab1 i tab2. W tab2 jest klucz obcy do tab1. Chciałbym po usunięciu rekordu z tab1 usunąć wszystkie rekordy z tab2, które odwołują się do usuniętego rekordu z tab1. Napisałem sobie trigger (idtabname - klucz obcy w tab2, idtab1 - klucz główny w tab1):

[kod SQL]
"create or replace trigger "TAB1_T1"
AFTER
  delete on "TAB1"
begin
    DELETE FROM tab2 WHERE idtabname = (:old.idtab1);
end;"

Problem polega na tym, że oracle wyrzuca mi błąd:

[ERROR]
"ORA-04082: NEW or OLD references not allowed in table level triggers<br />"

Jak można się odwołać do klucza głównego usuwanego rekordu (jeśli używam tabeli deleted, to wyskakuje mi błąd, że nie ma takiej tabeli)?

Bardzo proszę o pomoc.

1
CREATE OR REPLACE TRIGGER tab1_t1
AFTER DELETE ON tab1
FOR EACH ROW
BEGIN
    DELETE FROM tab2 WHERE idtabname = (:old.idtab1);
END;
1

Witam !
Może się mylę, ale podczas tworzenia klucza obcego decydujesz między innymi o sposobie 'zachowania się serwera' w momencie usunięcia rekordu w tabeli do której tworzysz referencje (on delete cascade).
Trigger nie jest w ogóle potrzebny ! Usunięcie rekordu z tabeli 1 powoduje automatyczne usunięcie rekordów z tabeli 2 zgodnie z założoną referencją.

Pozdrawiam
JW

0

Dzięki za duże zainteresowanie tematem i rzeczowe odpowiedzi.
Co do rozwiązania, to zastosowałem propozycję Misiekd'a i działa :-)
Innych nie sprawdzałem, ale dzięki za pomoc.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.