我正在为 MySQL 编写第一个存储过程。
存储过程需要创建一个临时表,然后向其中插入一些数据。
如果我在存储过程之外手动创建一个普通表,那么存储过程不会创建临时表,存储过程将被创建并完全按照我的要求执行。
如果我随后将创建临时表添加到存储过程中,MySQL 工作台将显示意外的结束和创建语句的 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/en/declare.html https://dev.mysql.com/doc/refman/5.7/en/declare.html says:
DECLARE 仅允许在 BEGIN ... END 复合语句内使用,并且必须位于其开头,在任何其他声明之前。
(强调我的)
就像下面这样:
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`));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)