gpt4 book ai didi

mysql - 带有循环和准备好的语句的存储过程 - 为什么它不起作用?

转载 作者:行者123 更新时间:2023-11-29 00:58:34 25 4
gpt4 key购买 nike

我正在尝试有选择地刷新特定数据库中一组有限的表 - 经过一些调查(咒骂和咒骂),我得出了:

DROP PROCEDURE IF EXISTS local_flush_cache;

DELIMITER $$

CREATE PROCEDURE local_flush_cache()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a VARCHAR(64);
DECLARE crsr CURSOR FOR SELECT table_name FROM information_schema.tables WHERE table_schema=database() AND table_name LIKE 'cache_%';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

OPEN crsr;

read_loop: LOOP
FETCH crsr INTO a;

IF done THEN
LEAVE read_loop;
END IF;

SET @s = CONCAT('DELETE FROM ', a);
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

END LOOP;

CLOSE crsr;

END$$
DELIMITER ;

唯一的问题是 - 它似乎不起作用。当我检查缓存表的内容时,它们还没有被清除。

当我调用该过程时,我得到的唯一输出是:

mysql> call local_flush_cache();
Query OK, 0 rows affected (0.00 sec)

然后当我从其中一个缓存表中获取行数时,我得到了一个非零结果。

最佳答案

由于您在第一行将分隔符设置为 $$,因此您需要将 second 行的分号更改为 $$ 相反。

关于mysql - 带有循环和准备好的语句的存储过程 - 为什么它不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4893690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com