【发布时间】:2013-01-20 17:26:21
【问题描述】:
我有一个使用临时表的存储过程,以便我可以汇总某个产品类别中所有产品的销售额。当我尝试运行代码时它失败了。我在谷歌和 stackoverflow 上搜索,但找不到我做错了什么。我在 Windows Server 上使用 MySQL server 5.5。
CREATE PROCEDURE `getStatistics`(IN `startDate` date,IN `endDate` date,IN `categoryName` varchar)
BEGIN
CREATE TEMPORARY TABLE procResult(productName VARCHAR, amount INT);
CREATE TEMPORARY TABLE tblProductID(SELECT ID, `name` FROM product WHERE categoryID = (SELECT ID FROM category WHERE `name` = categoryName));
DECLARE done_amt, done_PID INT DEFAULT FALSE;
DECLARE amount, productID INT DEFAULT 0;
DECLARE pidCursor CURSOR FOR SELECT ID, `name` FROM tblProductID;
DECLARE amtCursor CURSOR FOR SELECT orderlines.amount FROM orderlines WHERE orderlines.productID = productID;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done_amt = TRUE;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done_PID = TRUE;
OPEN pidCursor;
pid_loop:LOOP
DECLARE productName VARCHAR;
FETCH pidCursor INTO productID, productName;
IF done_PID THEN
LEAVE pid_LOOP;
END IF;
OPEN amtCursor;
amt_loop:LOOP
DECLARE tmpAmount INT DEFAULT 0;
FETCH amtCursor INTO tmpAmount;
IF done_amt THEN
LEAVE amt_loop;
END IF;
amount = amount + tmpAmount;
END LOOP;
CLOSE amtCursor;
IF amount > 0 THEN
INSERT INTO procResult VALUES (productName, amount);
amount = 0;
END IF;
END LOOP;
CLOSE pidCursor;
END;
【问题讨论】:
-
您遇到什么错误?如果您在第一个结束之前运行此过程两次,那么您可能无法创建临时表;)
-
我收到以下错误:
1064 - You have an error in your SQL syntax; check the manual that corresponds with yout MySQL server version for the right syntax to use near ') BEGIN CREATE TEMPORARY TABLE procResult(productName VARCHAR, amount INT); ' at line 1 -
好吧,它在尝试创建过程时失败了。但其实你是对的……
标签: mysql sql stored-procedures temp-tables