Функция Create возвращает двойное значение

#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 ;