【发布时间】:2015-10-19 14:45:58
【问题描述】:
我正在尝试为存储过程开发 SQL 语句,该语句将为我提供一些我将使用变量 (@repeated) 指定的计数。
我正在使用 Toad for MySQL,但我不断收到语法错误(描述性不强)。这是我的 SQL:
DECLARE @repeated INT DEFAULT 1;
DECLARE @mailingmonth DATE;
SET @mailingmonth = '2015-10-01';
WHILE @repeated < 12 DO
SELECT A.LoanNumber, Repeated FROM MKT_Mailing_Hist A
INNER JOIN (SELECT LoanNumber, COUNT(*) As Repeated
FROM MKT_Mailing_Hist B
WHERE MailingMonth <= @mailingmonth
GROUP BY LoanNumber) AS Months ON A.LoanNumber = Months.LoanNumber
WHERE A.MailingMonth = @mailingmonth
AND Repeated = @repeated
SET @repeated = @repeated + 1;
END WHILE;
END;
我认为这种语法可能存在几个问题,但我一直在进行更改,但似乎没有任何效果。
更新
我想将类似的代码封装在带有参数的存储过程中,以便我可以更改参数以满足我的需要。这就是我所拥有的:
DELIMITER $$
CREATE procedure sp_MKT_Counts_Test2 (vRepeated INT, vMailingmonth DATE)
BEGIN
WHILE vRepeated < 12 DO
SELECT COUNT(A.LoanNumber) FROM MKT_Mailing_Hist A
INNER JOIN (SELECT LoanNumber, COUNT(*) As Repeated
FROM MKT_Mailing_Hist B
WHERE MailingMonth <= vMailingmonth
GROUP BY LoanNumber) AS Months ON A.LoanNumber = Months.LoanNumber
WHERE A.MailingMonth = vMailingmonth
AND Repeated = vRepeated;
SET vRepeated = vRepeated + 1;
END WHILE;
END;
$$
DELIMITER ;
但是,当我使用两个参数调用存储过程时,我只收到一条消息,通知我该语句已成功执行,但我没有得到任何结果集。为什么没有结果集?我需要输出参数吗?
【问题讨论】:
-
如果你在mysql上,你需要写“DO”,在while条件之后:dev.mysql.com/doc/refman/5.0/en/while.html
-
BEGIN 仅适用于存储程序,例如过程或触发器。您是否在过程中工作?
-
Mihai -- 一旦我让它工作,我将把这段代码封装在一个过程中。根据您的建议,我删除了 BEGIN 命令;谢谢你。好的,我也在“WHILE @repeated
-
现在它将“DECLARE @repeated INT DEFAULT 1”标记为包含语法错误。
标签: mysql variables syntax toad