详情页

帝国cms存储过程declare i int报错

时间:2023年12月10日

编辑:佚名

这个错误提示是因为在MySQL中,DECLARE语句必须写在BEGIN语句的内部。可以按照以下格式重写代码:
BEGIN
    DECLARE i INT DEFAULT 1;
    WHILE (i <= 10) DO
        SELECT UNIX_TIMESTAMP(DATE_SUB('2023-06-02 00:00:00', INTERVAL i*3 DAY)) * 1000 AS start_time,
               UNIX_TIMESTAMP(DATE_SUB('2023-06-02 00:00:00', INTERVAL i*3 DAY) + INTERVAL 1 DAY - INTERVAL 1 SECOND) * 1000 AS end_time;
        SET i = i + 1;
    END WHILE;
END
以上代码将DECLARE语句和WHILE循环放入了BEGIN和END之间,并且需要将整个代码段作为一个存储过程来执行。如果需要在MySQL命令行中直接执行,可以使用DELIMITER指令将分隔符改为“$$”,如下所示:
DELIMITER $$
CREATE PROCEDURE my_procedure()
BEGIN
    DECLARE i INT DEFAULT 1;
    WHILE (i <= 10) DO
        SELECT UNIX_TIMESTAMP(DATE_SUB('2023-06-02 00:00:00', INTERVAL i*3 DAY)) * 1000 AS start_time,
               UNIX_TIMESTAMP(DATE_SUB('2023-06-02 00:00:00', INTERVAL i*3 DAY) + INTERVAL 1 DAY - INTERVAL 1 SECOND) * 1000 AS end_time;
        SET i = i + 1;
    END WHILE;
END$$
DELIMITER ;
上述代码定义了一个名为“my_procedure”的存储过程,并通过DELIMITER指令修改了分隔符。然后,在命令行中执行该存储过程即可。
值得注意的是,如果没有特殊需求,不建议频繁地执行大量重复的查询操作,因为会占用数据库资源并影响性能表现。
相关文章
猜你需要