ОШИБКА 1064 (42000): синтаксис SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '); - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь написать функцию MySQL ... но я получаю синтаксическую ошибку как

ОШИБКА 1064 (42000): у вас ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для права синтаксис для использования рядом с ');

Мой код, как показано ниже,

delimiter //
CREATE FUNCTION calculateNetItemStandardDiscountAmount(productId INT,quantity INT) RETURNS DOUBLE 
BEGIN
   DECLARE discountPer DOUBLE;
   DECLARE unitPrice DOUBLE;
   DECLARE netItemDiscountAmount DOUBLE;
   DECLARE netItemAmount DOUBLE;

   SELECT `SellingUnitPrice` into unitPrice 
   FROM `TBL_PRODUCT_MASTER` 
   WHERE `Id` = productId;
   SET netItemAmount = quantity * unitPrice ;
   insert into debugtable select concat('ACTUAL AMOUNT ', netItemAmount);

   SELECT discDetail.`DiscountPercentage` into discountPer 
   FROM `TBL_DISCOUNT_DETAIL` AS discDetail , `TBL_DISCOUNT` AS disc, TBL_PRODUCT_DISCOUNT AS prodDisc 
   WHERE disc.`DiscountStartDate` < NOW() 
         AND disc.`DiscountEndDate` > NOW() 
         AND disc.`SchemeType` = 'AMOUNT' 
         AND discDetail.DiscountId = disc.Id 
         AND prodDisc.productId = productId 
         AND prodDisc.discountId = disc.Id 
         AND prodDisc.`IsEnabled` = 1 
         AND disc.`IsEnabled` = 1 
         AND (quantity * unitPrice) >= discDetail.LowerLimit and (quantity * unitPrice) <= discDetail.HigherLimit);

   insert into debugtable select concat('STD DISCOUNT PER BY AMOUNT ', discountPer);
   IF (discountPer IS NOT NULL) THEN
       SET netItemDiscountAmount = ((netItemAmount) * (discountPer * 0.01));
       insert into debugtable select concat('APPLY VOLUME DISCOUNT ', netItemDiscountAmount);
   END IF;

   SELECT discDetail.`DiscountPercentage` into discountPer 
   FROM `TBL_DISCOUNT_DETAIL` AS discDetail , `TBL_DISCOUNT` AS disc, TBL_PRODUCT_DISCOUNT AS prodDisc 
   WHERE disc.`DiscountStartDate` < NOW() 
         AND disc.`DiscountEndDate` > NOW() 
         AND disc.`SchemeType` = 'VOLUME' 
         AND discDetail.DiscountId = disc.Id AND prodDisc.productId = productId 
         AND prodDisc.discountId = disc.Id 
         AND prodDisc.`IsEnabled` = 1  
         AND disc.`IsEnabled` = 1 
         AND (Quantity >= discDetail.LowerLimit and Quantity <= discDetail.HigherLimit);

   insert into debugtable select concat('STD DISCOUNT PER BY VOLUME ', discountPer);
   IF (discountPer IS NOT NULL) THEN
       SET netItemDiscountAmount = netItemDiscountAmount + ((netItemAmount) * (discountPer * 0.01));
       insert into debugtable select concat('APPLY AMOUNT DISCOUNT ', netItemDiscountAmount);
   END IF;

   RETURN netItemDiscountAmount;
END//
delimiter ;

Любая помощь будет высоко ценится ... Заранее спасибо ...

1 Ответ

0 голосов
/ 11 мая 2018

Похоже, у вас есть нераскрытые скобки в конце этой строки

SELECT discDetail.`DiscountPercentage` into discountPer FROM `TBL_DISCOUNT_DETAIL` AS discDetail , `TBL_DISCOUNT` AS disc, TBL_PRODUCT_DISCOUNT AS prodDisc WHERE disc.`DiscountStartDate` < NOW() AND disc.`DiscountEndDate` > NOW() AND disc.`SchemeType` = 'AMOUNT' AND discDetail.DiscountId = disc.Id AND prodDisc.productId = productId AND prodDisc.discountId = disc.Id AND prodDisc.`IsEnabled` = 1 AND disc.`IsEnabled` = 1 AND (quantity * unitPrice) >= discDetail.LowerLimit and (quantity * unitPrice) <= discDetail.HigherLimit)
...