ďťż

Ładny brzuch

Witam. Robię bazę danych w SQLite. Mam 3 tabele
1) Pliki (nazwa tabeli Files) - zawiera zbiór plików
2) Listy plików (nazwa tabeli List) - zawiera nazwy list plików (gdzie pliki się mogą powtarzać, czyli jest relacja n do m między tabeliami Pliki i Listy plików)
3) PlikLista (nazwa tabeli FileListConnection) - wynika z tej relacji n do m - tu krotka zawiera id pliku i id listy.

Chciałbym napisać trigger, który przy usunięciu listy sprawdza, czy pliki w niej zawarte znajdują się jeszcze na jakiejś liście, a jeśli nie, to usuwa z bazy również plik.
Mój pierwszy pomysł był taki:

CREATE TRIGGER t_FileListConnectionDelete BEFORE DELETE ON FileListConnection FOR EACH ROW BEGIN IF Exists(SELECT COUNT(*) FROM fileListConnection WHERE idFile = OLD.idFile AND idList != OLD.idList) THEN DELETE FROM Files WHERE idFile = OLD.idFile; END IF; END;

Ale to nie działa, ponieważ pokazuje się błąd : near IF syntax error

Potem pomyślałem, że zrobię tak:

CREATE TRIGGER t_FileListConnectionDelete BEFORE DELETE ON FileListConnection FOR EACH ROW DECLARE num INTEGER; BEGIN SELECT COUNT(*) INTO num FROM fileListConnection WHERE idFile = OLD.idFile AND idList != OLD.idList; IF num < 1 THEN DELETE FROM Files WHERE idFile = OLD.idFile; END IF; END;

Ale okazało się, że w SQLite nie można deklarować zmiennych.

Może macie jakieś propozycje, jak to zrobić, żeby działało?

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •