gpt4 book ai didi

mysql - 过程中的光标不返回任何值

转载 作者:行者123 更新时间:2023-11-29 22:27:51 25 4
gpt4 key购买 nike

我有一个创建临时表的数据库,这些表名称是随机生成的并保存在 Checkouts.unid 中。我想删除所有这些表并截断表 Checkouts。我认为最好的解决方案是一个程序,但它不起作用:

DROP PROCEDURE IF EXISTS `spCheckoutsCleanup`;
CREATE PROCEDURE `spCheckoutsCleanup` ()
SQL SECURITY INVOKER
BEGIN
DECLARE `t` VARCHAR(64);
DECLARE `ch` CURSOR FOR SELECT `unid` FROM `Checkouts`;
OPEN `ch`;

drop_tables: LOOP
FETCH `ch` INTO `t`;
DROP TABLE IF EXISTS `t`;
END LOOP;

CLOSE `ch`;
TRUNCATE TABLE `Checkouts`;
END

尽管这些表在那里并且表 Checkouts 不为空,但我总是收到“没有数据 - 提取、选择或处理零行”。

最佳答案

您必须添加类似的内容才能结束循环:

DECLARE CONTINUE HANDLER FOR NOT FOUND SET ...;

参见 documentation. 中的示例。例如。 ...

DROP PROCEDURE IF EXISTS `spCheckoutsCleanup`;
CREATE PROCEDURE `spCheckoutsCleanup` ()
SQL SECURITY INVOKER
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE `t` VARCHAR(64);
DECLARE `ch` CURSOR FOR SELECT `unid` FROM `Checkouts`;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN `ch`;

drop_tables: LOOP
FETCH `ch` INTO `t`;
IF done THEN
LEAVE drop_tables;
END IF;
DROP TABLE IF EXISTS `t`;
END LOOP;

CLOSE `ch`;
TRUNCATE TABLE `Checkouts`;
END

否则,一旦到达光标末尾,您就会收到错误消息。

关于mysql - 过程中的光标不返回任何值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30095425/

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