![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 10.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
W MSQL Server 2008 nie działa mi:
--Napisz wyzwalacz nie pozwalający na obniżanie pensji pracownikom – w przypadku takiej próby ma zwracać odpowiedni komunikat. CREATE TRIGGER notupdate BEFORE UPDATE OF pensja ON pracownik2 REFERENCING NEW AS after_update OLD AS before_update FOR EACH ROW BEGIN IF after_update.pensja = before_update.pensja THEN RAISERROR 30002 'You cannot decrease a salary'; END IF; END wzorowałem się na skrypcie pokazującym jak napisać podobny wyzwalacz, błędy są takie: Msg 102, Level 15, State 1, Procedure notupdate, Line 1 Incorrect syntax near 'BEFORE'. Msg 156, Level 15, State 1, Procedure notupdate, Line 5 Incorrect syntax near the keyword 'THEN'. Msg 102, Level 15, State 1, Procedure notupdate, Line 7 Incorrect syntax near ';'. Jeszcze mam, jak dla mnie, trudniejsze zadanie: --Utwórz wyzwalacz Archiwizuj, który po usunięciu pracownika z tabeli pracownik automatycznie umieszcza jego dane w tabeli pracownik_archiwum, wraz z datą usunięcia i nazwą użytkownika dokonującego operacji usuwania (select user_name() zwraca nazwę aktualnego użytkownika). CREATE TRIGGER archiwizuj ON pracownik2 AFTER DELETE AS tu zastanawiałem się nad użyciem REFERENCING, nie mam pojęcia jak przekierować dane z tabeli pracownik do pracownik_archiwum |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 10.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
--Napisz wyzwalacz nie pozwalający na obniżanie pensji pracownikom – w przypadku takiej próby ma zwracać odpowiedni komunikat.
CREATE TRIGGER notupdate ON pracownik2 FOR UPDATE AS DECLARE @pensja DECIMAL(6,2); BEGIN SELECT @pensja=pensja FROM inserted; IF @pensja < pensja RAISERROR 30002 'You cannot decrease a salary'; END -- SELECT pensja FROM pracownik2 -- IF (@pensja<pensja) -- SELECT pensja FROM pracownik2 -- WHERE nr_pracownika IN (SELECT nr_pracownika FROM inserted WHERE @pensja<pensja) Kombinowalem jak się da z tym ciałem funkcji, ale mimo to wywołuje błąd lecz zmienia przy tym wartości pensji, może ktoś napisać jak zmodyfikować poprawnie? Byłbym wdzięczny za szybką odpowiedź --UPDATE pracownik2 SET pensja=pensja-50.00 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 05:14 |