PROBLEM ROZWIAZANY, PROSZE O USUNIECIE TEMATU smile.gif


Witam smile.gif
Robię bazę danych w Postgresie, z interfejsem w PHP.

Czy możecie mi pomóc, i poradzić, dlaczego trigger może nie działać?
Powinien sprawdzać, czy nakładają się czasy trwania wykładu oraz kategorii (kategoria uczestnictwa w konferencji naukowej) - chcę w ten sposób sprawdzić, czy użytkownik zapisuje się na wykład, który odbywa się w dniu, w którym uczestniczy w konferencji. Jeśli nie, chcę zabronić mu zapisania się na dany wykład.

  1. CREATE OR REPLACE FUNCTION kategoriewyklady_check() returns TRIGGER AS '
  2. declare
  3. x bool;
  4. licznik int4 ;
  5. begin
  6. licznik = 0;
  7. x = (select (wyklady.kiedy,wyklady.trwanie) overlaps (kategorie.katkiedy,kategorie.kattrwanie) from zapisynawyklady,zapisynakonferencje,kategorie,wyklady WHERE zapisynawyklady.konfid=zapisynakonferencje.konfid AND zapisynawyklady.uczestid=zapisynakonferencje.uczestid AND zapisynawyklady.wykladid=wyklady.wykladid AND kategorie.katid=(select katid from zapisynakonferencje where uczestid=NEW.uczestid and konfid=NEW.konfid) AND zapisynawyklady.uczestid= NEW.uczestid AND zapisynawyklady.konfid= NEW.konfid AND wyklady.wykladid=NEW.wykladid);
  8. if x = false then
  9. licznik = licznik + 1;
  10. end if;
  11.  
  12. IF licznik=0 THEN
  13. return NEW;
  14.  
  15. ELSE
  16. raise notice ''Wyklad nie jest w dniu, w ktorym jestes zapisany na konferencje!'';
  17. return NULL;
  18. END IF;
  19. end;
  20. ' LANGUAGE 'plpgsql';
  21.  
  22. CREATE TRIGGER t_overlapskategoriewyklady before INSERT ON zapisynawyklady FOR each row execute procedure kategoriewyklady_check();



tabele:

kolumny w tabeli kategorie:
konfid | katid | kategoria|katkiedy| kattrwanie | koszt

w tabeli wyklady:
konfid | wykladid | temat| wykladowca | salaid |kiedy| trwanie | wolne_miejsca

w tabeli zapisynawyklady:
konfid | uczestid | wykladid

w tabeli zapisynakonferencje:
uczestid | konfid | katid