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 (IMG:style_emoticons/default/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
 
Start new topic
Odpowiedzi
KcR
post
Post #2





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

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


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.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 15.10.2025 - 18:43