![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 13.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Czesc!
Wytlumacze swoj problem na przykladzie: mam tabele z danymi pracownikow oraz z urlopami, ktore biora pracownicy. Napisalem sobie triggera, ktory po dodaniu czegos do tabeli Urlopy (after insert), odejmuje ilosc pozostalego urlopu dla danego pracownika z tabeli Pracownicy. Tyle, ze dziala on w ten sposob, ze mozna dodawac urlopy w nieskonczonosc, czyli powodowac ujemne wartosci w polu IloscUrlopu w tabeli Pracownicy. Chcialbym to zmienic - mam dwa pomysly: pierwszy jest taki, ze w triggerze, ktory napisalem uwarunkuje wykonanie sie wszystkiego od zawartosci pola IloscUrlopu w tabeli Pracownicy dla danego pracownika, a drugi taki, ze napisze nowego triggera "before update on Pracownicy", ktory sprawdzi wartosc pola IloscUrlopu danego pracownika i jesli bedzie za mala, to przerwie zmiane wartosci (+ np. usunie wpis z tabeli Urlopy). Jak sadzicie, ktora opcja jest lepsza (chyba, ze macie jakies inne pomysly) i jak takie cos napisac? Prosze o szybka odpowiedz, dzieki z gory. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 10 Dołączył: 8.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Moim zdaniem trigger najlepiej pasuje przypiąć do tabeli urlopy, przed insertem.
Sprawdzasz wtedy w tabelce pracownicy, czy pracownik ma jeszcze dostatecznie duzo dni urlopu. Jak nie ma to anulujesz inserta - to jest lepsze niz kasowanie (o ktorym napisales) poniewaz informujesz aplikacje, ze nie dalo sie dodac urlopu. -------------------- --------------------------------------------------------------------------------
weblog.axent.pl -------------------------------------------------------------------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 13.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
No zgadza sie, jest to lepsze rozwiazanie (pisalem tego posta bardzo szybko i teraz widze, ze odbilo sie to na jakosci mojej wypowiedzi
![]() ![]() Dzieki za odpowiedz ![]() |
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Nie przygladalem sie triggerom w MySQLu ale adektwanie bedzie jak w innych bazach, wystarczy ze zwrocisz false, null w triggerze i rekord nie zostanie dodany, jesli zwracasz NEW czy OLD to operacja dochodzi do skutku.
-------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 13.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Ok, wymyslilem to czego szukalem. Okazalo sie, ze jedynym sposobem na anulowanie transakcji w triggerze jest spowodowanie jakiegos bledu, np. odwolanie sie do nieistniejacej kolumny w tabeli (tabela musi istniec, inaczej blad bedzie za kazdym razem wyskakiwal). Wykorzystalem przy tym fakt, ze w komunikacie o bledzie pojawi sie nazwa tej kolumny, a moj trigger prezentuje sie nastepujaco:
Coz, mam nadzieje, ze komus to sie przyda ![]() Pozdrawiam. Ten post edytował djgrin 4.06.2007, 23:18:32 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Sprawdz to co pisalem wczesniej. Jesli stosujesz trigger przed dodaniem rekordu i z triggera zamiast return NEW zwrocisz false czy doda rekord. Jesli takie cos zadziala to problem masz rozwiazany i nie trzeba z bledem kombinowac.
Sprawdz to niestety w manualu czegos takiego sie nie doszukalem co w cale nie jest powiedziane ze nie istnieje. -------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 13.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Niestety trzeba "kombinowac z bledem", bo nie ma czegos takiego jak "return new", czy "return" w ogole w triggerach w tym systemie (stad te braki w manualu). A pomysl z bledem nie jest niestety moj:
http://www.brokenbuild.com/blog/2006/08/15...with-a-trigger/ Pozdrawiam. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Dobrze wiedziec na przyszlosc. Pewnie kiedys wprowadza.
-------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.06.2025 - 02:25 |