mysql中create过程的两个in参数

huwehgph  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(273)

我正在创建一个过程,返回用户输入的两个日期之间的总销售额。我认为这是一个草率的代码,但我不能让它运行,我已经改变了很多次。我担心我离答案越来越远,而不是越来越近。这是我的密码:

DELIMITER //
CREATE PROCEDURE salesBetween (IN date1(date), date2(date),
                               OUT totalsale(decimal(10,2)))
BEGIN
   SELECT SUM(hslineitem.numOrdered * hslineitem.price)
   FROM hslineitem, hsorders
   WHERE hsorders.orderId = hslineitem.orderId
   AND (hsorders.orderDate BETWEEN date1 AND date2)
   AND orderdate = date1, date2;
END //
DELIMITER ;

这是我第一次尝试使用多个用户输入,所以我猜我的问题与此有关。我在网上能找到的大部分东西都不是mysql特有的,所以没有什么帮助。

n9vozmp4

n9vozmp41#

请不要使用旧的基于逗号的隐式联接,而使用现代的显式联接 Join 基于语法
而且,我不认为 AND orderdate = date1, date2; 它在语法上也是错误的。我把它拿走了。

DELIMITER //
CREATE PROCEDURE salesBetween (IN date1 date, /* no brackets needed around datatype */ 
                               IN date2 date, /* specify IN for this parameter */
                               OUT totalsale decimal(10,2))
BEGIN
   SELECT SUM(hslineitem.numOrdered * hslineitem.price) INTO totalsale 
   FROM hslineitem  /* Changed to JOIN .. ON syntax */
   JOIN hsorders ON hsorders.orderId = hslineitem.orderId
   WHERE (hsorders.orderDate BETWEEN date1 AND date2);
END //
DELIMITER ;

相关问题