Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> wyzwalacze
kamillo1290
post
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kamillo1290
post
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
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 05:14