Witam, tworzę bazę danych zawierającą informacje o programie studiów na mojej uczelni i pojawił się problem z pewną procedurą, której kod zamieszczam poniżej:
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.