#mysql #sql #mariadb
#mysql #sql #mariadb
Вопрос:
Я хочу создать некоторую функцию в phpmyadmin
DELIMITER //
CREATE FUNCTION total_bayar (order_id char(10))
RETURNS double
DETERMINISTIC
BEGIN
DECLARE dist double;
SET dist = SELECT sum(qty * price) FROM detail_masakan WHERE order_id = order_id;
RETURN dist;
END//
DELIMITER ;
Запрос SQL: Документация
CREATE FUNCTION total_bayar (order_id char(10))
RETURNS double
DETERMINISTIC
BEGIN
DECLARE dist double;
SET dist = SELECT sum(qty * price) FROM detail_masakan WHERE order_id = order_id;
RETURN dist;
END
MySQL говорит: Документы
#1064 — У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с ‘ВЫБЕРИТЕ сумму (кол-во * цена) Из detail_masakan, ГДЕ order_id = order_id;
RETURN’ в строке 6
Комментарии:
1. Вы не должны давать параметрам то же имя, что и имена столбцов.
Ответ №1:
Похоже, ему не понравилось ваше использование команды SET. Используйте SELECT…Вместо этого.
DELIMITER //
CREATE FUNCTION total_bayar (order_id char(10)) RETURNS double
DETERMINISTIC
BEGIN
DECLARE dist double;
SELECT sum(qty * price) INTO dist FROM detail_masakan WHERE order_id = order_id;
RETURN dist;
END// DELIMITER ;
Ответ №2:
Вам нужны круглые скобки для подзапроса:
SET dist = (SELECT sum(qty * price) FROM detail_masakan WHERE order_id = order_id);
Однако это все равно не будет делать то, что вы хотите, потому что имена переменных перепутаны — и будут путаться с именами столбцов.
Я бы предложил:
DELIMITER //
CREATE FUNCTION total_bayar (in_order_id char(10))
RETURNS double
DETERMINISTIC
BEGIN
DECLARE out_dist double;
SELECT out_dist := sum(dm.qty * dm.price)
FROM detail_masakan dm
WHERE dm.order_id = in_order_id;
RETURN out_dist;
END//
DELIMITER ;