热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

Ihaveadatabasewheretemptablesarecreated,thosetablenamesarerandomlygeneratedandsaved

I have a database where temp tables are created, those table names are randomly generated and saved in Checkouts.unid. I want to drop all those tables and truncate the table Checkouts. I thought the niftiest solution would be a procedure, but it will not work:

我有一个创建临时表的数据库,这些表名是随机生成的并保存在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

I always get "No data - zero rows fetched, selected, or processed" although those tables are there and the table Checkouts is not empty though.

我总是得到“没有数据 - 零行提取,选择或处理”,虽然这些表在那里,表Checkouts不是空的。

2 个解决方案

#1


You have to add something like this in order to end your loop:

你必须添加这样的东西才能结束你的循环:

DECLARE CONTINUE HANDLER FOR NOT FOUND SET ...;

See example in the documentation.. E.g. ...

请参阅文档中的示例..例如...

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

Otherwise you will get an error once you reached the end of your cursor.

否则,一旦到达光标的末尾,就会出现错误。

#2


I got it working with this:

我得到了它:

DROP PROCEDURE IF EXISTS `spCheckoutsCleanup`;
CREATE PROCEDURE `spCheckoutsCleanup` ()
  SQL SECURITY INVOKER
BEGIN
    DECLARE done int DEFAULT 0;
    DECLARE t CHAR(64);
    DECLARE ch CURSOR FOR SELECT `unid` FROM `Checkouts`;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET dOne= 1;
    OPEN ch;

    drop_table: LOOP
        FETCH ch INTO t;
        IF dOne= 1 THEN
            LEAVE drop_table;
        END IF;
        SET @sql := CONCAT('DROP TABLE IF EXISTS `', t, '`'); 
        PREPARE dropt FROM @sql; 
        EXECUTE dropt;
    END LOOP;

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

推荐阅读
  • des算法php,Des算法属于加密技术中的
    本文目录一览:1、des是什么算法2、80分求 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 路径查找基础知识-动画演示
    这是教程教你建立路径查找算法的第一步。路径查找就是在两点之间查找最短路径的算法,你可以在很多地方应用,例如:玩家控制角色时通过点击设置目的地时,就需要用到。在开始前,我们需要明确一点:路径查找是在终点 ... [详细]
  • 【Codeforces 1076D】Edge Deletion | 最短路树
    题目大意:给定n,m,k:n个点,m条边,要进行删边操作,最后可以保留最多k条边定义一个点i是好的当且仅当在删除一些边之 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
author-avatar
晶晶9930_195
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有