CREATE TABLE klient(kid INTEGER NOT NULL PRIMARY KEY,name VARCHAR(100),rabat DECIMAL(5,2)) CREATE TABLE zamowienie(zid INTEGER NOT NULL PRIMARY KEY,data_zamowienia DATE,suma_rachunku DECIMAL (10,2),klient INTEGER,pracownik INTEGER,FOREIGN KEY (klient) REFERENCES klient(kid))
i mam zamiar zrobic teraz triggera, ktory przy kazdej aktualizacji atrybutu suma_rachunku z relacji zamowienie bedzie sprawdzal, czy zamawiajacy klient w aktualnym roku (czas systemowy, nie konkretna data zamowienia) zamowil na wiecej niz 10.000, ale nie wieksza niz 100.000. Za kazde 10.000 dostaje 2% rabatu.
CREATE TRIGGER upd_rechsum AFTER UPDATE OF suma_rachunku ON zamowienie REFERENCING NEW ROW AS n FOR EACH ROW WHEN (EXISTS (YEAR(data_zamowienia)=YEAR(CURRENT DATE) AND suma_rachunku >= 10000 AND suma_rachunku <= 100000) BEGIN ATOMIC -- tu zaczynaja sie moje glowne problemy UPDATE zamowienie SET suma_rachunku = suma_rachunku - rabat UPDATE klient SET rabat = ((SELECT suma_rachunku FROM zamowienie) suma_rachunku/10000)) * 2; END@