Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem ze składnią w funkcji
Forum PHP.pl > Forum > Bazy danych > MySQL
KcR
Cześć wszystkim, przeszukałem połowę Internetu i nie mogę znaleźć odpowiedzi na mój problem. Prawdopodobnie błąd jest tak niuansowy, aż będzie mi wstyd wstydnis.gif. Przechodząc do rzeczy oto kod funkcji:
  1. Delimiter $$
  2. CREATE FUNCTION check_isbn (isbn int(13)) RETURNS BOOL
  3.  
  4. BEGIN
  5.  
  6. DECLARE a int;
  7. DECLARE b int;
  8. DECLARE c int;
  9. DECLARE d int;
  10. DECLARE e int;
  11. DECLARE f int;
  12. DECLARE g int;
  13. DECLARE h int;
  14. DECLARE i int;
  15. DECLARE j int;
  16. DECLARE k int;
  17. DECLARE l int;
  18. DECLARE m int;
  19. DECLARE test int;
  20. DECLARE wynik bool;
  21.  
  22. IF CHARACTER_LENGTH(CAST(isbn AS CHAR)) = 10 then
  23. SET a=mod(isbn, 10);
  24. SET b=FLOOR(mod(isbn, 100)/10);
  25. SET c=FLOOR(mod(isbn, 1000)/100);
  26. SET d=FLOOR(mod(isbn, 10000)/1000);
  27. SET e=FLOOR(mod(isbn, 100000)/10000);
  28. SET f=FLOOR(mod(isbn, 1000000)/100000);
  29. SET g=FLOOR(mod(isbn, 10000000)/1000000);
  30. SET h=FLOOR(mod(isbn, 100000000)/10000000);
  31. SET i=FLOOR(mod(isbn, 1000000000)/100000000);
  32. SET j=FLOOR(mod(isbn, 10000000000)/1000000000);
  33.  
  34. SET test= mod((j+2*i+3*h+4*g+5*f+6*e+7*d+8+c+9*b), 11);
  35.  
  36. IF test=a then
  37. SET wynik = TRUE;
  38. else then
  39. SET wynik = FALSE;
  40. ENDIF;
  41.  
  42. elseif CHARACTER_LENGTH(CAST(isbn AS CHAR)) = 13 then
  43.  
  44. SET a=mod(isbn, 10);
  45. SET b=FLOOR(mod(isbn, 100)/10);
  46. SET c=FLOOR(mod(isbn, 1000)/100);
  47. SET d=FLOOR(mod(isbn, 10000)/1000);
  48. SET e=FLOOR(mod(isbn, 100000)/10000);
  49. SET f=FLOOR(mod(isbn, 1000000)/100000);
  50. SET g=FLOOR(mod(isbn, 10000000)/1000000);
  51. SET h=FLOOR(mod(isbn, 100000000)/10000000);
  52. SET i=FLOOR(mod(isbn, 1000000000)/100000000);
  53. SET j=FLOOR(mod(isbn, 10000000000)/1000000000);
  54. SET k=FLOOR(mod(isbn, 100000000000)/10000000000);
  55. SET l=FLOOR(mod(isbn, 1000000000000)/100000000000);
  56. SET m=FLOOR(mod(isbn, 10000000000000)/1000000000000);
  57.  
  58. SET test=10-mod((m+k+i+g+e+c+3*(l+j+h+f+d+b)), 10);
  59.  
  60. IF test=a then
  61. SET wynik = TRUE;
  62. else then
  63. SET wynik= FALSE;
  64. ENDIF;
  65.  
  66. else then
  67. SET wynik = FALSE;
  68. ENDIF;
  69. RETURN wynik;
  70. END$$
  71. Delimiter ;


Problem jest w 37 linijce kodu (tak podaje edytor). Błąd jest tej treści:
"#1064 - 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 'else then
SET wynik = FALSE
ENDIF;
elseif CHARACTER_LENGTH(CAST(isb' at line 37 "

W dokumentacji MySQL nie mogę znaleźć różnicy, a patrząc na przykłady z różnych stron też wszystko wygląda tak samo. Ma ktoś pomysł jak to naprawić? Z góry dziękuję za odpowiedź.
bpskiba
...else then.....

w manualu jest nie ma takiej składni. Powinno być samo else
w Twoim kodzie jest to w paru miejscach

http://dev.mysql.com/doc/refman/5.0/en/if.html
KcR
Dzięki wielkie, dodatkowo poprawiłem to "ENDIF" na "END IF" bo tutaj też nie popisałem się. Za długo człowiek siedzi nad tym to potem głupich błędów nie widzi. Jeszcze raz dzięki wielkie i temat do zamknięcia.
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.