Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Trigger update
Forum PHP.pl > Forum > Bazy danych
pinio27
Ktoś ma może pomysł jak z dwóch tych trigger'ów (insert i delete) zrobić jeden trigger na update? Jakoś sensownie to połączyć...

  1. CREATE OR REPLACE TRIGGER tr_add_zawodnik before
  2. INSERT ON zawodnicy
  3. referencing new AS new_row
  4. FOR each row
  5. begin
  6. UPDATE pleczawodnicy
  7. SET suma=((SELECT DISTINCT suma FROM pleczawodnicy p , zawodnicy z
  8. WHERE p.Plec_Zawodnikow=new_row.plec AND p.Numer_Klubu=new_row.nrklubu AND z.nrklubu=p.Numer_Klubu)+1)
  9. WHERE pleczawodnicy.Numer_Klubu=new_row.nrklubu AND pleczawodnicy.Plec_Zawodnikow=new_row.plec;
  10. end;
  11.  
  12.  
  13. CREATE OR REPLACE TRIGGER tr_del_zawodnik before
  14. DELETE ON zawodnicy
  15. referencing old AS old_row
  16. FOR each row
  17. begin
  18. UPDATE pleczawodnicy
  19. SET suma=((SELECT DISTINCT suma FROM pleczawodnicy p , zawodnicy z
  20. WHERE p.Plec_Zawodnikow=old_row.plec AND p.Numer_Klubu=old_row.nrklubu AND z.nrklubu=p.Numer_Klubu)-1)
  21. WHERE pleczawodnicy.Numer_Klubu=old_row.nrklubu AND pleczawodnicy.Plec_Zawodnikow=old_row.plec;
  22. end;


Fifi209
Nie można stworzyć triggera dla dwóch akcji na raz.
pinio27
Może inaczej...jak połączyć selecta z inserta z selectem z delete aby wyszedł update?

Dokładnie chodzi o tą część kodu:
  1. INSERT
  2. SET suma=((SELECT DISTINCT suma FROM pleczawodnicy p , zawodnicy z
  3. WHERE p.Plec_Zawodnikow=new_row.plec AND p.Numer_Klubu=new_row.nrklubu AND z.nrklubu=p.Numer_Klubu)+1)
  4. WHERE pleczawodnicy.Numer_Klubu=new_row.nrklubu AND pleczawodnicy.Plec_Zawodnikow=new_row.plec;
  5.  
  6. DELETE
  7. SET suma=((SELECT DISTINCT suma FROM pleczawodnicy p , zawodnicy z
  8. WHERE p.Plec_Zawodnikow=old_row.plec AND p.Numer_Klubu=old_row.nrklubu AND z.nrklubu=p.Numer_Klubu)-1)
  9. WHERE pleczawodnicy.Numer_Klubu=old_row.nrklubu AND pleczawodnicy.Plec_Zawodnikow=old_row.plec;


Czyli z dwóch tych selectów zrobić jeden...żeby dodwał +1 i odejmował -1.

W ogóle to zadanie polegało na tym, żeby napisać trzy triggery (insert, delete, update), które polegają na tym, że na przykład dodaje się nowego zawodnika do tabeli zawodnicy co powoduje, że inna tabela automatycznie się aktualizuje, zlicza ile jest dokładnie zawodników w danym klubie.

Z tym, że nie mogę się uporać z tym trzecim triggerem na update...który ponoć można stworzyć łącząc jakoś sensownie ze sobą selecta z inserta z selectem z delete.
Fifi209
Trzymasz informację o w osobnej tabeli ilu masz zawodników? Przecież to czyste szaleństwo.

Mógłbyś pokazać strukturę tej bazy?
pinio27
Chodzi o to, że po dodaniu jakiegoś nowego zawodnika do tabeli zawodnicy ma się w tabeli pleczawodnicy zliczać (suma) ilość zawodników w danym klubie.


Cała baza wygląda tak:





Fifi209
Ale ta dodatkowa tabela ze zliczonymi jest niepotrzebna, przecież takie rzeczy się z JOIN'ami robi
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.