DELIMITER // CREATE PROCEDURE ZamienPrzedmiotObowiazkowy (IN NrIndeksu_in INT, IN IdPzedmiotuOb_in INT, IN IdPrzedmiotu2_in INT, IN DataDecyzji_in DATE) LANGUAGE SQL DETERMINISTIC SQL SECURITY DEFINER BEGIN CREATE TABLE LOG_BLEDOW (Nr INT AUTO_INCREMENT PRIMARY KEY, OpisBledu TEXT); IF NOT EXISTS (SELECT * FROM STUDENCI WHERE NrIndeksu=NrIndeksu_in) THEN INSERT INTO LOG_BLEDOW (OpisBledu) VALUES ('Nie ma studenta o podanym numerze indeksu'); END IF; IF NOT EXISTS (SELECT * FROM PRZEDMIOTY WHERE IdPrzedmiotu=IdPrzedmiotuOb_in AND Grupa='Obowiazkowy') THEN INSERT INTO LOG_BLEDOW (OpisBledu) VALUES ('Nie istnieje przedmiot obowiazkowy o podanym identyfikatorze'); ELSE IF EXISTS (SELECT * FROM PRZEDMIOTY_ZEWNETRZNE JAKO_OBOWIAZKOWE WHERE NrIndeksu=NrIndeksu_in AND IdPrzedmiotuOb=IdPrzedmiotu_in) THEN INSERT INTO LOG_BLEDOW (OpisBledu) VALUES ('Ten przedmiot obowiazkowy zostal juz zamieniony na przedmiot zewnetrzny'); ELSE IF EXISTS (SELECT * FROM ZAMIANY_PRZEDMIOTOW_OBOWIAZKOWYCH WHERE NrIndeksu=NrIndeksu_in AND IdPrzedmiotuOb=IdPrzedmiotuOb_in) THEN INSERT INTO LOG_BLEDOW (OpisBledu) VALUES ('Zamiana tego przedmiotu obowiazkowego zostala juz zdefiniowana.'); ELSE IF EXISTS (SELECT * FROM OCENY WHERE NrIndeksu=NrIndeksu_in AND IdPrzedmiotuOb=IdPrzedmiotuOb_in) THEN INSERT INTO LOG_BLEDOW (OpisBledu) VALUES ('Ten przedmiot obowiazkowy zostal juz zaliczony, wiec nie moze zostac zamieniony'); ELSE IF NOT EXISTS (SELECT * FROM PRZEDMIOTY WHERE IdPrzedmiotu=IdPrzedmiotuOb_in AND Grupa='Obowiazkowy' AND CzyAktywny=TRUE) THEN INSERT INTO LOG_BLEDOW (OpisBledu) VALUES ('Podany przedmiot obowiazkowy nie jest aktywny'); END IF; IF NOT EXISTS (SELECT * FROM PRZEDMIOTY WHERE IdPrzedmiotu=IdPrzedmiotu2_in AND (Grupa='II stopien' OR Grupa='Dodatkowy')) THEN INSERT INTO LOG_BLEDOW (OpisBledu) VALUES ('Nie istnieje przedmiot ze studiow II stopnia ani dodatkowy o podanym identyfikatorze'); ELSE IF EXISTS (SELECT * FROM OCENY WHERE NrIndeksu=NrIndeksu_in AND IdPrzedmiotu=IdPrzedmiotu2_in) THEN INSERT INTO LOG_BLEDOW (OpisBledu) VALUES ('Przedmiot ten ten zostal juz zaliczony, wiec nie moze posluzyc do zamiany'); ELSE IF (EXISTS (SELECT * FROM ZAMIANY_PRZEDMIOTOW_OBOWIAZKOWYCH WHERE NrIndeksu=NrIndeksu_in AND IdPrzedmiotu2=IdPrzedmiotu2_in)) OR (EXISTS (SELECT * FROM ZAMIANY_PRZEDMIOTOW_ABCGPS WHERE NrIndeksu=NrIndeksu_in AND IdPrzedmiotu=IdPrzedmiotu_in)) THEN INSERT INTO LOG_BLEDOW (OpisBledu) VALUES ('Ten przedmiot ze studiow II stopnia lub dodatkowy zostal juz uwzgledniony w innej zamianie'); ELSE IF ( EXISTS ( SELECT * FROM PRZEDMIOTY WHERE IdPrzedmiotu=IdPrzedmiotuOb_in AND Grupa='II stopien')) AND (EXISTS (SELECT * FROM PRZEDMIOTY_Z_II_STOPNIA_JAKO_DODATKOWE WHERE NrIndeksu=NrIndeksu_in AND IdPrzedmiotu2st=IdPrzedmiotu2_in)) THEN INSERT INTO LOG_BLEDOW (OpisBledu) VALUES ('Podany przedmiot ze studiow II stopnia jest obecnie zaliczany jako dodatkowy'); ELSE IF NOT EXISTS (SELECT * FROM PRZEDMIOTY WHERE IdPrzedmiotu=IdPrzedmiotu2_in AND (Grupa='II stopien' OR Grupa='Dodatkowy') AND CzyAktywny=TRUE) THEN INSERT INTO LOG_BLEDOW (OpisBledu) VALUES ('Podany przedmiot ze studiow II stopnia lub dodatkowy nie jest aktywny'); END IF; IF EXISTS (SELECT * FROM LOG_BLEDOW) THEN SELECT * FROM LOG_BLEDOW; ELSE BEGIN INSERT INTO ZAMIANY_PRZEDMIOTOW_OBOWIAZKOWYCH VALUES (NrIndeksu_in, IdPrzedmiotuOb_in, IdPrzedmiotu2_in, DataDecyzji_in); SELECT 'Zamiana przedmiotow zostala zapisana' AS Info; DROP TABLE LOG_BLEDOW; END; END IF; END//
Problemem jest błąd, który otrzymuję przy wczytywaniu z pliku tej procedury o treści:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 47.
Będę bardzo wdzięczny za jakąkolwiek pomoc.