2016-03-30 7 views
1

Ich erhalte diese Störung, wenn ich unten Abfrage ausgeführt werden soll Funktion zum Erstellen, überprüfe ich alles, was es scheint, dass ich das Problem nicht finden kann:MySQL-Fehler, wenn Funktion Erstellen

MySQL sagte: Dokumentation # 1064 - Sie haben einen Fehler in Ihrer SQL Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version für die richtige Syntax entspricht, um 'ELSEIF-Preis' zu verwenden. 1000 THEN BEGIN SET last3 = SUBSTRING (Preis, -3); 'At line 18

DELIMITER $$ 


CREATE FUNCTION GetPrice(number decimal(10,2), profit decimal (10,2)) RETURNS INT 
    DETERMINISTIC 
BEGIN 
    DECLARE price int; 
    DECLARE last3 int; 
    DECLARE rootn int; 
    SET price = CEIL(number + (number * profit /100)); 
    IF price < 1000 THEN 
    BEGIN 
     IF (price > 0 and price <= 500) THEN 
     SET price = 500; 
     ELSEIF (price >500 and price <= 750) THEN 
     SET price = 750; 
     ELSEIF (price >750 and price < 1000) THEN 
     SET price = 1000; 
     END IF; 
    END 
    ELSEIF price > 1000 THEN 
    BEGIN 
     SET last3 = SUBSTRING(price, -3); 
     SET rootn = price-last3; 
     IF (last3 >= 0 and price <= 100) THEN 
     SET last3 = 0; 
     ELSEIF (last3 > 100 and price <= 350) THEN 
     SET last3 = 250; 
     ELSEIF (last3 > 350 and price <= 600) THEN 
     SET last3 = 500; 
     ELSEIF (last3 > 600 and last3 <= 850) THEN 
     SET last3 = 750; 
     ELSEIF (last3 > 850 and price <= 1000) THEN 
     SET last3 = 1000; 
     END IF; 
     SET price = rootn + last3; 
    END 
    ELSEIF price = 10000 THEN 
    SET price = 1000; 
    END IF; 

RETURN (price); 
END$$ 
DELIMITER; 

Können Sie mir bitte helfen?

+2

Codeblöcke abgegrenzt sind mit 'BEGIN' und' END', Klammern nicht. http://dev.mysql.com/doc/refman/5.7/en/begin-end.html –

+0

Dank @BillKarwin, ich habe einen anderen Fehler Ich werde den Code aktualisieren :) – Akam

Antwort

2

Sie haben END mit einem Semikolon zu beenden:

DELIMITER // 
CREATE FUNCTION `GetPrice`(number decimal(10,2), profit decimal (10,2)) RETURNS int(11) 
    DETERMINISTIC 
BEGIN 
    DECLARE price int; 
    DECLARE last3 int; 
    DECLARE rootn int; 
    SET price = CEIL(number + (number * profit /100)); 
    IF price < 1000 THEN 
    BEGIN 
     IF (price > 0 and price <= 500) THEN 
     SET price = 500; 
     ELSEIF (price >500 and price <= 750) THEN 
     SET price = 750; 
     ELSEIF (price >750 and price < 1000) THEN 
     SET price = 1000; 
     END IF; 
    END;        -- here 
    ELSEIF price > 1000 THEN 
    BEGIN 
     SET last3 = SUBSTRING(price, -3); 
     SET rootn = price-last3; 
     IF (last3 >= 0 and price <= 100) THEN 
     SET last3 = 0; 
     ELSEIF (last3 > 100 and price <= 350) THEN 
     SET last3 = 250; 
     ELSEIF (last3 > 350 and price <= 600) THEN 
     SET last3 = 500; 
     ELSEIF (last3 > 600 and last3 <= 850) THEN 
     SET last3 = 750; 
     ELSEIF (last3 > 850 and price <= 1000) THEN 
     SET last3 = 1000; 
     END IF; 
     SET price = rootn + last3; 
    END;         -- and here 
    ELSEIF price = 10000 THEN 
    SET price = 1000; 
    END IF; 

RETURN (price); 
END// 
DELIMITER ; 

SQL Fiddle

+0

Ich habe das aber immer noch einen Fehler bitte ausführen die Frage, ob Sie MySQL installiert haben – Akam

+0

@Akam Interessant. Es läuft auf meiner Maschine. Obwohl sqlfiddle es ablehnt. Aber ich kenne ihre Syntax für Trennzeichen nicht. Bitte versuchen Sie meine Codeblock wieder, ich bin mit MariaDB 10. – robsn

+0

Oh, es funktionierte für mich :) – Akam