在存储过程中创建临时表

时间:2017-11-22 21:37:13

标签: mysql stored-procedures

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

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

如果我在存储过程之外手动创建一个普通表,那么存储过程不会创建临时表,而是创建存储过程并完成我所追求的。

如果我然后将创建临时表添加到存储过程,则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 ; 

我看不出有什么可以说创建临时表是不可能的,所以我做错了什么。

1 个答案:

答案 0 :(得分:5)

https://dev.mysql.com/doc/refman/5.7/en/declare.html说:

  

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