【问题标题】:Create function returns double value创建函数返回双精度值
【发布时间】:2019-08-27 22:54:03
【问题描述】:

我想在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 detail_masakan WHERE order_id = order_id;
附近使用的正确语法 RETURN' 在第 6 行

【问题讨论】:

  • 您不应为参数指定与列名相同的名称。

标签: mysql sql mariadb


【解决方案1】:

子查询需要括号:

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 ;

【讨论】:

    【解决方案2】:

    似乎它不喜欢您使用 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 ;
    

    【讨论】:

      猜你喜欢
      • 2019-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多