繁体   English   中英

在存储过程中创建临时表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM