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