2016-12-16 2 views
0

У меня есть код функции sql, который я экспортировал из другого db. Но когда я запускаю, это дает ошибкуЭкспортированный код Sql дает ошибку при запуске

# 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует версии сервера MariaDB на право синтаксиса использовать вблизи «» в строке 4

My SQL код

CREATE DEFINER=`root`@`localhost` FUNCTION `getCOGS`(pItemId BIGINT) RETURNS float 
    DETERMINISTIC 
BEGIN 
    declare vRet FLOAT; 
    SET vRet = 0.00; 
    SELECT SUM(d.quantity*d.unitPrice)/SUM(d.quantity) INTO vRet 
    FROM transaction_detail d 
    INNER JOIN transaction t ON (t.componentId = d.transactionId AND t.`type` = 'PURCHASE') 
    WHERE d.itemId = pItemId AND d.`type` = 1 AND d.accountId = 12; 
    RETURN vRet; 
END 
+0

[тег: SQL-сервер] представляет собой специфический продукт базы данных SQL от Microsoft. Кажется, что ни ваш синтаксис, ни сообщение об ошибке не относятся к этому продукту. Я предлагаю вам [изменить] ваш вопрос и перемаркировать его с помощью правильного тега - который выглядит как [tag: mariadb] –

+0

@Damien_The_Unbeliever: кажется, он экспортировал из mariaDB и спрашивает, как его изменить, чтобы он мог запускать на SQLServer – TheGameiswar

+0

@TheGameiswar - сообщение об ошибке * упоминает mariadb. Так что это целевой сервер. Я не могу разговаривать с исходным сервером, но сценарий не соответствует синтаксису SQL Server. Поэтому на данный момент я не считаю, что SQL Server является либо источником, либо местом назначения. –

ответ

0

Вы должны изменить разделитель. Попробуйте

DELIMITER | 

CREATE DEFINER=`root`@`localhost` FUNCTION `getCOGS`(pItemId BIGINT) RETURNS float 
    DETERMINISTIC 
BEGIN 
    declare vRet FLOAT; 
    SET vRet = 0.00; 
    SELECT SUM(d.quantity*d.unitPrice)/SUM(d.quantity) INTO vRet 
    FROM transaction_detail d 
    INNER JOIN transaction t ON (t.componentId = d.transactionId AND t.`type` = 'PURCHASE') 
    WHERE d.itemId = pItemId AND d.`type` = 1 AND d.accountId = 12; 
    RETURN vRet; 
END 
| 
DELIMITER ; 

Оператор DELIMITER изменяет стандартный разделитель, который точка с запятой (;) к другому (здесь |).

После вашего запроса, вы можете установить его в ;

+0

@ nishan Решено ли? – jophab

Смежные вопросы