Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem ze składnią w funkcji
KcR
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 8.06.2014

Ostrzeżenie: (0%)
-----


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ź.

Ten post edytował KcR 8.06.2014, 21:12:33
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 12:29