我想实现的目标
我正在MySQL数据库上创建一个Procedure
,它将得到标记为netamt
的净额总计列,其中标记为purdate
的购买日期在StartDate
和{之间{1}}。我用SQL查询尝试了两种单独的方法。当我运行EndDate
查询时,MySQL会接受它并创建我的CREATE
。但是,当我尝试调用Procedure
时,它将返回Procedure
。
我的SQL查询
这是我的第一个NULL
代码的样子:
CREATE
这是我的第二个CREATE DEFINER=`*****`@`localhost` PROCEDURE `Payable_Total_Net`(
IN startDate DATE,
IN endDate DATE,
OUT totalNet DECIMAL(19,4)
)
BEGIN
SELECT
SUM(COALESCE(p.netamt,0)) INTO totalNet
FROM Payables p
WHERE p.purdate >= str_to_date(startDate, '%Y-%m-d%') AND p.purdate <= str_to_date(endDate, '%Y-%m-d%');
END
代码的样子:
CREATE
这是具有正确结果的普通查询的样子:
CREATE DEFINER=`*****`@`localhost` PROCEDURE `Payable_Total_Net`(
IN startDate DATE,
IN endDate DATE,
OUT totalNet DECIMAL(19,4)
)
BEGIN
SELECT
SUM(COALESCE(p.netamt,0)) INTO totalNet
FROM Payables p
WHERE p.purdate BETWEEN str_to_date(startDate, '%Y-%m-d%') AND str_to_date(endDate, '%Y-%m-d%');
END
这就是我所说的SELECT
SUM(COALESCE(p.netamt,0)) as totalNet
FROM Payables p
WHERE p.purdate BETWEEN '2018-01-01' AND '2018-12-31'
:
Procedure
答案 0 :(得分:1)
您正在将值作为日期传递。您不需要转换它们:
CREATE DEFINER=`*****`@`localhost` PROCEDURE `Payable_Total_Net`(
IN in_startDate DATE,
IN in_endDate DATE,
OUT out_totalNet DECIMAL(19,4)
)
BEGIN
SELECT COALESCE(SUM(p.netamt), 0) INTO out_totalNet
FROM Payables p
WHERE p.purdate >= in_startDate AND
p.purdate <= in_endDate;
END;