![]() |
![]() |
![]()
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%) ![]() ![]() |
Dzięki za pomoc.
Mam takie zadanie: --3.Napisz wyzwalacz, który uniemożliwi usunięcie rekordu z tabeli pracownik - powinien zostać wypisany komunikat: "Usuwanie rekordów z tabeli pracownik nie jest dozwolone". CREATE TRIGGER notdelete ON pracownik2 INSTEAD OF DELETE AS BEGIN SET NOCOUNT ON IF ((SELECT nr_pracownika FROM deleted) = (SELECT nr_pracownika FROM deleted)) RAISERROR 30001 'Usuwanie rekordów z tabeli pracownik nie jest dozwolone' END --DELETE FROM pracownik2 WHERE nr_pracownika='0012'; --DELETE FROM pracownik2 WHERE imie='JAREK'; powyżej mój pomysł na rozwiązanie, teoretycznie działa, lecz ten warunek nie do końca mi się podoba, może ktoś ma jakieś sugestie do korekty? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 04:51 |