创建函数返回双精度值

时间:2019-04-06 03:06:50

标签: 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:Dokumentasi

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说:Dokumentasi

  

#1064-您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册以获取正确的语法,以在'SELECT sum(qty * price)FROM FROM detail_masakan WHERE order_id = order_id;
附近使用     在第6行返回”

2 个答案:

答案 0 :(得分:0)

似乎不喜欢您使用SET命令。改用SELECT ... INTO。

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 ;

答案 1 :(得分:0)

您需要在子查询中加上括号:

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 ;