簡體   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