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

. Przechodząc do rzeczy oto kod funkcji:
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ź.
Ten post edytował KcR 8.06.2014, 21:12:33