Mysql 在存储过程中创建临时表

Mysql 在存储过程中创建临时表,mysql,stored-procedures,Mysql,Stored Procedures,我正在为MySQL编写我的第一个存储过程 存储过程需要创建一个临时表,然后向其中插入一些数据 如果我在存储过程之外手动创建一个普通表,那么存储过程不会创建临时表,而存储过程是创建的,并且完全按照我的要求执行 如果我随后将create临时表添加到存储过程中,MySQL workbench将显示create语句的意外结束和en 下面是我的存储过程 DELIMITER // CREATE PROCEDURE getLast24Hours() BEGIN #End of the

我正在为MySQL编写我的第一个存储过程

存储过程需要创建一个临时表,然后向其中插入一些数据

如果我在存储过程之外手动创建一个普通表,那么存储过程不会创建临时表,而存储过程是创建的,并且完全按照我的要求执行

如果我随后将create临时表添加到存储过程中,MySQL workbench将显示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 ; 
分隔符//
创建过程getLast24Hours()
开始
#下面一行的结尾我得到了意想不到的结果,没有这个,它工作正常
创建表hours(`Hour`VARCHAR(8)不为NULL,`Value`INT不为NULL默认值0,主键(`Hour`));
声明crt_time VARCHAR(8);
声明计数器INT;
声明currentTime日期时间;
设置currentTime=NOW();
设置crt_时间=日期_格式(当前时间,%d-%m%H');
设置计数器=0;
而计数器<23
插入小时(`Hour`)值(crt\U时间);
设置currentTime=currentTime-间隔1小时;
设置crt_时间=日期_格式(当前时间,%d-%m%H');
设置计数器=计数器+1;
结束时;
结束//
定界符;
我看不出有什么可以说创建临时表是不可能的,那么我做错了什么呢

说:

仅允许在BEGIN中声明。。。结束复合语句,并且必须在其开始处,在任何其他语句之前。

(强调矿山)

例如:

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`)); 

“MySQL workbench然后显示意外的结尾和create语句的en。”您可以编辑它以引用准确的错误、位置等吗。?这个措辞不清楚。我没有意识到,在存储过程的中间不允许声明太繁琐。这就解决了。谢谢你的帮助