1

Temat: Błąd w procedurze, triggerze. Pilne.

Witajcie.
Mam problem z ostatnim zadaniem w moim pierwszym projekcie, czyli triggerem. Całą bazę zrobiłem, wszystko działa, zapytania śmigają. Podaje niżej tworzoną tabelę i procedurę wraz z triggerem do niej. I tu jest problem. Wywala błąd do procedury:

ERROR:  syntax error at or near ";"
LINE 10: END;
                   ^

create table magazyn
( ksiazkaID int not null,
  ilosc int not null,
  opis varchar(50),
  CONSTRAINT ksiazki_fk FOREIGN KEY (ksiazkaID) REFERENCES ksiazki(ksiazkaID)
);


CREATE FUNCTION wpis()
RETURNS TRIGGER AS $$
BEGIN
IF NEW.ilosc < 2                                                                            
THEN INSERT INTO magazyn VALUES (old.klientid, new.ilosc, 'uwaga, kończy się');
IF NEW.ilosc > 20   
THEN INSERT INTO magazyn VALUES (old.klientid, new.ilosc, 'ale tego tu jest');                                                                       
END IF;
RETURN NEW;
END;
$$ LANGUAGE 'plpgsql'
;


CREATE TRIGGER wpis_w_opis
BEFORE UPDATE ON magazyn
FOR EACH ROW PROCEDURE wpis();

Prubowałem juz wszystkiego i nie daje rady. Wygląda na banalny problem ale mnie zmurowało. Proszę o pomoc. Jutro cały projekt muszę wysłać a zostało mi tylko zrobić procedure i triggera. Z góry dziękuje.

2

Odp: Błąd w procedurze, triggerze. Pilne.

IF NEW.ilosc > 20

3

Odp: Błąd w procedurze, triggerze. Pilne.

Dzięki za odpowiedź. Narazie trigger i funkcja wygląda tak:

CREATE FUNCTION wpis()
RETURNS TRIGGER AS $$
BEGIN
IF NEW.ilosc < 2                                                                             
THEN INSERT INTO magazyn VALUES (old.ksiazkaid, new.ilosc, 'uwaga, kończy się');
END IF;   
IF NEW.ilosc > 20   
THEN INSERT INTO magazyn VALUES (old.ksiazkaid, new.ilosc, 'ale tego  tu jest');                                                                       
END IF;
RETURN NEW;
END
$$ LANGUAGE 'plpgsql'
;


CREATE TRIGGER wpis_w_opis
AFTER UPDATE ON magazyn
FOR EACH ROW EXECUTE PROCEDURE wpis();


Ładuje się bez problemu ale...
Problem nastepny z tym zwiazany to to, że jka robię update:

UPDATE magazyn SET ilosc=1 WHERE ksiazkaid=2;

to wstawia mi krotkę gdzie ilosc=1, ksiazkaid=2, opis='uwaga, kończy się'
a oprócz tego wstawia mi to samo ale z opis=''

Nie wiem jak to ugryźć, coś mi swita, że to wynika z funkcji, z insertu w niej...

Jak zrobić aby na updateowanej krotce wprowadzić zmiany w moim przypadku wstawić opis='uwaga, kończy się'.
Procedura dodaje mi krotke a tego niechcę. Pomóżcie proszę jutro muszę to skończyć. No tak, jest po 00:00 więc dzisiaj sad

Ostatnio edytowany przez lito77 (2012-01-19 01:05:39)

4

Odp: Błąd w procedurze, triggerze. Pilne.