gpt4 book ai didi

mysql - MySQL中的临时表定义

转载 作者:行者123 更新时间:2023-11-29 14:05:26 25 4
gpt4 key购买 nike

我有一个使用临时表的存储过程,以便我可以汇总某个产品类别中所有产品的销售情况。当我尝试运行代码时失败了。我在 google 和 stackoverflow 上搜索,但找不到我做错了什么。我在 Windows Server 上使用 MySQL 服务器 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;

最佳答案

  1. 您必须定义 VARCHAR 的长度类型变量,例如存储过程的 categoryName 参数;

  2. 您必须DECLARE BEGIN ... END compound statement block 开头的所有局部变量,在任何其他命令之前;

  3. CREATE TABLE ... SELECT 的语法不正确;

  4. 您已为同一 SQL 条件声明了两个处理程序,仅执行其中一个 ( indeterminately );

  5. 您需要更改客户端的语句定界符,以便它理解过程主体中出现的分号不会终止 CREATE PROCEDURE声明;

  6. 您的整个过程是用 SQL 执行相当简单的任务的极其复杂的方式:

    CREATE TEMPORARY TABLE procResult
    SELECT product.name, SUM(orderlines.amount) AS amount
    FROM orderlines
    JOIN product ON product.ID = orderlines.productID
    JOIN category ON category.ID = product.categoryID
    WHERE category.name = ?
    GROUP BY product.ID
    HAVING amount > 0

关于mysql - MySQL中的临时表定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14427138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com