2016-03-30 9 views
1

oluşturma, bunu Sorunu bulamadığını görünüyor şeyi kontrol:MySQL Hatası Ben fonksiyonunu oluşturmak için sorguya altında yürütmek istediğinizde bu hatayı alıyorum İşlevini

MySQL söyledi: Belgeler # 1064 - SQL sözdiziminde bir hata var; doğru sözdiziminin MySQL sunucu sürümünüze uygun olan elkitabı kontrol edin 'ELSEIF fiyatı> 1000 THEN BEGIN SET last3 = SUBSTRING (fiyat, -3); 'Hat 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; 

de bana yardım eder misiniz?

+2

Kod blokları BEGIN' ve 'Sonu '' ile sınırlanmış, parantez değil. http://dev.mysql.com/doc/refman/5.7/en/begin-end.html –

+0

Teşekkürler @BillKarwin, Kodu değiştireceğim başka bir hata aldım :) – Akam

cevap

2

Bir noktalı virgül ile END bitirmek zorunda:

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

Bunu yaptım ama yine de hata alıyorum lütfen Eğer mysql – Akam

+0

@Akam İlginç yüklüyse sorgunuz var. Makinemde çalışıyor. Her ne kadar sqlfiddle bunu reddediyor. Ama sınırlayıcılar için kendi sözdizimini bilmiyorum. Lütfen tekrar codeblock'umu deneyin, ben MariaDB 10'u çalıştırıyorum. – robsn

+0

Oh benim için çalıştı :) – Akam

İlgili konular