[英]Creating temporary table inside stored procedure
我正在为MySQL编写第一个存储过程。
该存储过程需要创建一个临时表,然后将一些数据插入其中。
如果我在存储的proc之外手动创建普通表,则存储的proc不会创建临时表,存储的proc将被创建并完全执行我要执行的操作。
如果我将创建临时表添加到存储的proc中,则MySQL工作台将显示意外的结尾和create语句的en。
以下是我存储的过程
DELIMITER //
CREATE PROCEDURE getLast24Hours()
BEGIN
#End of the below line I get unexpected end without this it works fine
CREATE TABLE hours (`Hour` VARCHAR(8) NOT NULL, `Value` INT NOT NULL DEFAULT 0, PRIMARY KEY(`Hour`));
DECLARE crt_time VARCHAR(8);
DECLARE counter INT;
DECLARE currentTime DATETIME;
SET currentTime = NOW();
SET crt_time = DATE_FORMAT(currentTime, '%d-%m %H');
SET counter = 0;
WHILE counter < 23 DO
INSERT INTO hours (`Hour`) VALUES (crt_time);
SET currentTime = currentTime - INTERVAL 1 HOUR;
SET crt_time = DATE_FORMAT(currenttime, '%d-%m %H');
SET counter = counter + 1;
END WHILE;
END //
DELIMITER ;
我看不出有什么可以说不能创建临时表的信息,所以我在做什么错。
https://dev.mysql.com/doc/refman/5.7/zh-CN/declare.html说:
仅在BEGIN ... END复合语句中允许使用DECLARE,并且必须在其开始处以及其他任何语句之前。
(强调我的)
如下所示:
CREATE PROCEDURE getLast24Hours()
BEGIN
DECLARE crt_time VARCHAR(8);
DECLARE counter INT;
DECLARE currentTime DATETIME;
CREATE TABLE hours (`Hour` VARCHAR(8) NOT NULL, `Value` INT NOT NULL DEFAULT 0, PRIMARY KEY(`Hour`));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.