Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Błąd w procedurze
Forum PHP.pl > Forum > Bazy danych > MySQL
ryuzaki
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:
  1. DELIMITER //
  2. CREATE PROCEDURE ZamienPrzedmiotObowiazkowy (IN NrIndeksu_in INT, IN IdPzedmiotuOb_in INT, IN IdPrzedmiotu2_in INT, IN DataDecyzji_in DATE)
  3. LANGUAGE SQL
  4. DETERMINISTIC
  5. SQL SECURITY DEFINER
  6. BEGIN
  7. CREATE TABLE LOG_BLEDOW (Nr INT AUTO_INCREMENT PRIMARY KEY, OpisBledu TEXT);
  8.  
  9. IF NOT EXISTS (SELECT * FROM STUDENCI WHERE NrIndeksu=NrIndeksu_in) THEN
  10. INSERT INTO LOG_BLEDOW (OpisBledu) VALUES ('Nie ma studenta o podanym numerze indeksu');
  11. END IF;
  12.  
  13. IF NOT EXISTS (SELECT * FROM PRZEDMIOTY WHERE IdPrzedmiotu=IdPrzedmiotuOb_in AND Grupa='Obowiazkowy') THEN
  14. INSERT INTO LOG_BLEDOW (OpisBledu) VALUES ('Nie istnieje przedmiot obowiazkowy o podanym identyfikatorze');
  15.  
  16. ELSE IF EXISTS (SELECT * FROM PRZEDMIOTY_ZEWNETRZNE JAKO_OBOWIAZKOWE WHERE NrIndeksu=NrIndeksu_in AND IdPrzedmiotuOb=IdPrzedmiotu_in) THEN
  17. INSERT INTO LOG_BLEDOW (OpisBledu) VALUES ('Ten przedmiot obowiazkowy zostal juz zamieniony na przedmiot zewnetrzny');
  18.  
  19. ELSE IF EXISTS (SELECT * FROM ZAMIANY_PRZEDMIOTOW_OBOWIAZKOWYCH WHERE NrIndeksu=NrIndeksu_in AND IdPrzedmiotuOb=IdPrzedmiotuOb_in) THEN
  20. INSERT INTO LOG_BLEDOW (OpisBledu) VALUES ('Zamiana tego przedmiotu obowiazkowego zostala juz zdefiniowana.');
  21.  
  22. ELSE IF EXISTS (SELECT * FROM OCENY WHERE NrIndeksu=NrIndeksu_in AND IdPrzedmiotuOb=IdPrzedmiotuOb_in) THEN
  23. INSERT INTO LOG_BLEDOW (OpisBledu) VALUES ('Ten przedmiot obowiazkowy zostal juz zaliczony, wiec nie moze zostac zamieniony');
  24.  
  25. ELSE IF NOT EXISTS (SELECT * FROM PRZEDMIOTY WHERE IdPrzedmiotu=IdPrzedmiotuOb_in AND Grupa='Obowiazkowy' AND CzyAktywny=TRUE) THEN
  26. INSERT INTO LOG_BLEDOW (OpisBledu) VALUES ('Podany przedmiot obowiazkowy nie jest aktywny');
  27. END IF;
  28.  
  29. IF NOT EXISTS (SELECT * FROM PRZEDMIOTY WHERE IdPrzedmiotu=IdPrzedmiotu2_in AND (Grupa='II stopien' OR Grupa='Dodatkowy')) THEN
  30. INSERT INTO LOG_BLEDOW (OpisBledu) VALUES ('Nie istnieje przedmiot ze studiow II stopnia ani dodatkowy o podanym identyfikatorze');
  31. ELSE IF EXISTS (SELECT * FROM OCENY WHERE NrIndeksu=NrIndeksu_in AND IdPrzedmiotu=IdPrzedmiotu2_in) THEN
  32. INSERT INTO LOG_BLEDOW (OpisBledu) VALUES ('Przedmiot ten ten zostal juz zaliczony, wiec nie moze posluzyc do zamiany');
  33. 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
  34. INSERT INTO LOG_BLEDOW (OpisBledu) VALUES ('Ten przedmiot ze studiow II stopnia lub dodatkowy zostal juz uwzgledniony w innej zamianie');
  35. 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
  36. INSERT INTO LOG_BLEDOW (OpisBledu) VALUES ('Podany przedmiot ze studiow II stopnia jest obecnie zaliczany jako dodatkowy');
  37. ELSE IF NOT EXISTS (SELECT * FROM PRZEDMIOTY WHERE IdPrzedmiotu=IdPrzedmiotu2_in AND (Grupa='II stopien' OR Grupa='Dodatkowy') AND CzyAktywny=TRUE) THEN
  38. INSERT INTO LOG_BLEDOW (OpisBledu) VALUES ('Podany przedmiot ze studiow II stopnia lub dodatkowy nie jest aktywny');
  39. END IF;
  40.  
  41. IF EXISTS (SELECT * FROM LOG_BLEDOW) THEN SELECT * FROM LOG_BLEDOW;
  42. ELSE
  43. BEGIN
  44. INSERT INTO ZAMIANY_PRZEDMIOTOW_OBOWIAZKOWYCH VALUES (NrIndeksu_in, IdPrzedmiotuOb_in, IdPrzedmiotu2_in, DataDecyzji_in);
  45. SELECT 'Zamiana przedmiotow zostala zapisana' AS Info;
  46. DROP TABLE LOG_BLEDOW;
  47. END;
  48. END IF;
  49. 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.
tvister
może to banalne ale spróbuj zamienić instrukcje else if na elseif
ryuzaki
Dokładnie o to chodziło, w końcu udało mi się na to wpaść. Ale tak czy siak, dzięki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.