MySQL中用于创建过程的两个IN参数

时间:2018-11-24 20:21:11

标签: mysql stored-procedures

我正在创建一个过程,该过程将返回用户输入的两个日期之间的总销售额。我认为这是草率的代码,但是我无法使其运行,并且已经对其进行了多次更改。我担心我离答案越来越远而不是越来越近。这是我的代码:

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的,因此它并没有太大帮助。

1 个答案:

答案 0 :(得分:2)

请不要使用基于旧逗号的隐式联接,而不要使用现代Explicit Join based syntax

此外,我看不到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 ;