
Delimiter $$ CREATE FUNCTION check_isbn (isbn int(13)) RETURNS BOOL BEGIN DECLARE a int; DECLARE b int; DECLARE c int; DECLARE d int; DECLARE e int; DECLARE f int; DECLARE g int; DECLARE h int; DECLARE i int; DECLARE j int; DECLARE k int; DECLARE l int; DECLARE m int; DECLARE test int; DECLARE wynik bool; IF CHARACTER_LENGTH(CAST(isbn AS CHAR)) = 10 then SET a=mod(isbn, 10); SET b=FLOOR(mod(isbn, 100)/10); SET c=FLOOR(mod(isbn, 1000)/100); SET d=FLOOR(mod(isbn, 10000)/1000); SET e=FLOOR(mod(isbn, 100000)/10000); SET f=FLOOR(mod(isbn, 1000000)/100000); SET g=FLOOR(mod(isbn, 10000000)/1000000); SET h=FLOOR(mod(isbn, 100000000)/10000000); SET i=FLOOR(mod(isbn, 1000000000)/100000000); SET j=FLOOR(mod(isbn, 10000000000)/1000000000); SET test= mod((j+2*i+3*h+4*g+5*f+6*e+7*d+8+c+9*b), 11); IF test=a then SET wynik = TRUE; else then SET wynik = FALSE; ENDIF; elseif CHARACTER_LENGTH(CAST(isbn AS CHAR)) = 13 then SET a=mod(isbn, 10); SET b=FLOOR(mod(isbn, 100)/10); SET c=FLOOR(mod(isbn, 1000)/100); SET d=FLOOR(mod(isbn, 10000)/1000); SET e=FLOOR(mod(isbn, 100000)/10000); SET f=FLOOR(mod(isbn, 1000000)/100000); SET g=FLOOR(mod(isbn, 10000000)/1000000); SET h=FLOOR(mod(isbn, 100000000)/10000000); SET i=FLOOR(mod(isbn, 1000000000)/100000000); SET j=FLOOR(mod(isbn, 10000000000)/1000000000); SET k=FLOOR(mod(isbn, 100000000000)/10000000000); SET l=FLOOR(mod(isbn, 1000000000000)/100000000000); SET m=FLOOR(mod(isbn, 10000000000000)/1000000000000); SET test=10-mod((m+k+i+g+e+c+3*(l+j+h+f+d+b)), 10); IF test=a then SET wynik = TRUE; else then SET wynik= FALSE; ENDIF; else then SET wynik = FALSE; ENDIF; RETURN wynik; END$$ 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ź.