帝国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指令修改了分隔符。然后,在命令行中执行该存储过程即可。
值得注意的是,如果没有特殊需求,不建议频繁地执行大量重复的查询操作,因为会占用数据库资源并影响性能表现。
猜你需要

豫ICP备2021026617号-1  豫公网安备:41172602000185   Copyright © 2021-2028 www.78moban.com/ All Rights Reserved

本站作品均来自互联网,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。如有侵犯您的版权,请联系 1565229909#qq.com(把#改成@),我们将立即处理。