У меня есть следующий код:
CREATE FUNCTION calcular_preco (id_produto INT(11), customer_group_id_informado INT(11))
RETURNS DECIMAL(15, 4)
BEGIN
DECLARE preco_normal DECIMAL(15, 4);
DECLARE pd_preco DECIMAL(15, 4);
DECLARE pd_percentual INT(1);
DECLARE pd_somar INT(1);
DECLARE preco_promocional DECIMAL(15, 4);
DECLARE preco_final DECIMAL(15, 4);
# Preço normal
SELECT price
INTO preco_normal
FROM oc_product
WHERE product_id = id_produto;
# Preço diferenciado
SELECT price, percentual, somar
INTO pd_preco, pd_percentual, pd_somar
FROM oc_product_discount
WHERE product_id = id_produto
AND ((date_start = '0000-00-00' OR date_start < NOW())
AND (date_end = '0000-00-00' OR date_end > NOW()))
AND customer_group_id = customer_group_id_informado
AND quantity = '1'
ORDER BY priority ASC
LIMIT 1;
# Se este produto tiver preço diferenciado, deverá ser feito o cálculo do preço final
SELECT IF(pd_preco IS NOT NULL, IF(pd_percentual, IF(pd_somar, preco_normal + ((preco_normal * pd_preco)/100), preco_normal - ((preco_normal * pd_preco)/100)), pd_preco), NULL) AS preco_diferenciado
INTO pd_preco;
# Preço promocional
SELECT price
INTO preco_promocional
FROM oc_product_special
WHERE product_id = id_produto
AND customer_group_id = customer_group_id_informado
AND ((date_start = '0000-00-00' OR date_start < NOW())
AND (date_end = '0000-00-00' OR date_end > NOW()))
ORDER BY priority ASC
LIMIT 1;
SELECT CASE
WHEN preco_promocional IS NULL AND pd_preco IS NULL THEN preco_normal
WHEN preco_promocional IS NOT NULL AND pd_preco IS NULL THEN preco_promocional
WHEN preco_promocional IS NULL AND pd_preco IS NOT NULL THEN pd_preco
WHEN preco_promocional < pd_preco THEN preco_promocional
ELSE pd_preco
END
INTO preco_final;
RETURN preco_final;
END;
При выполнении этого запроса в моей базе данных отображается ошибка:
1064 - у вас есть синтаксическая ошибка в SQL рядом с '' в строке 6
Строка 6:
DECLARE preco_normal DECIMAL(15, 4);
Судя по документации, в этой строке нет ничего плохого. Вы знали, что это за ошибка?
Моя версия: 10.4.11-MariaDB.